// Generated from presto/presto-parser/src/main/antlr4/com/facebook/presto/sql/parser/SqlBase.g4 by ANTLR 4.13.1
// jshint ignore: start
import antlr4 from 'antlr4';
import SqlBaseListener from './SqlBaseListener.js';
const serializedATN = [4,1,250,1919,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,
7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,
2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,
20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,
7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,33,7,33,2,34,7,
34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,
2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,
49,7,49,2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,
7,56,2,57,7,57,2,58,7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,
63,2,64,7,64,2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,
2,71,7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,
78,7,78,1,0,1,0,1,0,1,1,1,1,1,1,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,
1,3,1,3,1,3,1,3,1,3,1,3,3,3,181,8,3,1,3,1,3,1,3,3,3,186,8,3,1,3,1,3,1,3,
1,3,3,3,192,8,3,1,3,1,3,3,3,196,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,
1,3,1,3,1,3,3,3,210,8,3,1,3,1,3,3,3,214,8,3,1,3,1,3,3,3,218,8,3,1,3,1,3,
3,3,222,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,230,8,3,1,3,1,3,3,3,234,8,3,1,3,
3,3,237,8,3,1,3,1,3,1,3,1,3,1,3,3,3,244,8,3,1,3,1,3,1,3,1,3,1,3,5,3,251,
8,3,10,3,12,3,254,9,3,1,3,1,3,1,3,3,3,259,8,3,1,3,1,3,3,3,263,8,3,1,3,1,
3,1,3,1,3,3,3,269,8,3,1,3,1,3,1,3,1,3,1,3,3,3,276,8,3,1,3,1,3,1,3,1,3,1,
3,1,3,1,3,3,3,285,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,294,8,3,1,3,1,3,1,
3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,305,8,3,1,3,1,3,1,3,1,3,1,3,3,3,312,8,3,1,
3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,322,8,3,1,3,1,3,1,3,1,3,1,3,3,3,329,8,
3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,337,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,345,8,
3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,353,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,5,
3,363,8,3,10,3,12,3,366,9,3,1,3,1,3,1,3,3,3,371,8,3,1,3,1,3,1,3,3,3,376,
8,3,1,3,1,3,1,3,1,3,3,3,382,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,391,8,3,
1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,400,8,3,1,3,1,3,1,3,3,3,405,8,3,1,3,1,3,
3,3,409,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,417,8,3,1,3,1,3,1,3,1,3,1,3,3,3,
424,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,437,8,3,1,3,3,3,
440,8,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,448,8,3,10,3,12,3,451,9,3,3,3,453,8,
3,1,3,1,3,1,3,1,3,1,3,3,3,460,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,469,8,
3,1,3,1,3,1,3,1,3,3,3,475,8,3,1,3,1,3,1,3,3,3,480,8,3,1,3,1,3,3,3,484,8,
3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,492,8,3,10,3,12,3,495,9,3,3,3,497,8,3,1,3,
1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,507,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,
1,3,5,3,518,8,3,10,3,12,3,521,9,3,1,3,1,3,1,3,3,3,526,8,3,1,3,1,3,1,3,3,
3,531,8,3,1,3,1,3,1,3,1,3,3,3,537,8,3,1,3,1,3,1,3,1,3,1,3,5,3,544,8,3,10,
3,12,3,547,9,3,1,3,1,3,1,3,3,3,552,8,3,1,3,1,3,1,3,1,3,1,3,3,3,559,8,3,1,
3,1,3,1,3,1,3,5,3,565,8,3,10,3,12,3,568,9,3,1,3,1,3,3,3,572,8,3,1,3,1,3,
3,3,576,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,584,8,3,1,3,1,3,1,3,1,3,3,3,590,
8,3,1,3,1,3,1,3,5,3,595,8,3,10,3,12,3,598,9,3,1,3,1,3,3,3,602,8,3,1,3,1,
3,3,3,606,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,616,8,3,1,3,3,3,619,8,
3,1,3,1,3,3,3,623,8,3,1,3,3,3,626,8,3,1,3,1,3,1,3,1,3,5,3,632,8,3,10,3,12,
3,635,9,3,1,3,1,3,3,3,639,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,660,8,3,1,3,1,3,1,3,1,3,3,3,666,8,
3,1,3,1,3,1,3,1,3,3,3,672,8,3,3,3,674,8,3,1,3,1,3,1,3,1,3,3,3,680,8,3,1,
3,1,3,1,3,1,3,3,3,686,8,3,3,3,688,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,696,8,
3,3,3,698,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
3,1,3,1,3,3,3,717,8,3,1,3,1,3,1,3,3,3,722,8,3,1,3,1,3,1,3,1,3,1,3,3,3,729,
8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,741,8,3,3,3,743,8,3,1,3,
1,3,1,3,1,3,1,3,1,3,3,3,751,8,3,3,3,753,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,
1,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,769,8,3,10,3,12,3,772,9,3,3,3,774,8,3,1,
3,1,3,3,3,778,8,3,1,3,1,3,3,3,782,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,
3,1,3,1,3,1,3,1,3,1,3,5,3,798,8,3,10,3,12,3,801,9,3,3,3,803,8,3,1,3,1,3,
1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,817,8,3,10,3,12,3,820,9,3,1,
3,1,3,3,3,824,8,3,3,3,826,8,3,1,4,3,4,829,8,4,1,4,1,4,1,5,1,5,3,5,835,8,
5,1,5,1,5,1,5,5,5,840,8,5,10,5,12,5,843,9,5,1,6,1,6,3,6,847,8,6,1,7,1,7,
1,7,1,7,3,7,853,8,7,1,7,1,7,3,7,857,8,7,1,7,1,7,3,7,861,8,7,1,8,1,8,1,8,
1,8,3,8,867,8,8,1,9,1,9,1,9,1,9,5,9,873,8,9,10,9,12,9,876,9,9,1,9,1,9,1,
10,1,10,1,10,1,10,1,11,1,11,1,11,1,12,5,12,888,8,12,10,12,12,12,891,9,12,
1,13,1,13,1,13,1,13,3,13,897,8,13,1,14,5,14,900,8,14,10,14,12,14,903,9,14,
1,15,1,15,1,16,1,16,3,16,909,8,16,1,17,1,17,1,17,1,18,1,18,1,18,3,18,917,
8,18,1,19,1,19,3,19,921,8,19,1,20,1,20,1,20,3,20,926,8,20,1,21,1,21,1,21,
1,21,1,21,1,21,1,21,1,21,1,21,3,21,937,8,21,1,22,1,22,1,23,1,23,1,23,1,23,
1,23,1,23,5,23,947,8,23,10,23,12,23,950,9,23,3,23,952,8,23,1,23,1,23,1,23,
3,23,957,8,23,3,23,959,8,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,3,23,968,
8,23,3,23,970,8,23,1,24,1,24,1,24,1,24,1,24,1,24,3,24,978,8,24,1,24,1,24,
1,24,1,24,3,24,984,8,24,1,24,5,24,987,8,24,10,24,12,24,990,9,24,1,25,1,25,
1,25,1,25,1,25,1,25,1,25,5,25,999,8,25,10,25,12,25,1002,9,25,1,25,1,25,1,
25,1,25,3,25,1008,8,25,1,26,1,26,3,26,1012,8,26,1,26,1,26,3,26,1016,8,26,
1,27,1,27,3,27,1020,8,27,1,27,1,27,1,27,5,27,1025,8,27,10,27,12,27,1028,
9,27,1,27,1,27,1,27,1,27,5,27,1034,8,27,10,27,12,27,1037,9,27,3,27,1039,
8,27,1,27,1,27,3,27,1043,8,27,1,27,1,27,1,27,3,27,1048,8,27,1,27,1,27,3,
27,1052,8,27,1,28,3,28,1055,8,28,1,28,1,28,1,28,5,28,1060,8,28,10,28,12,
28,1063,9,28,1,29,1,29,1,29,1,29,1,29,1,29,5,29,1071,8,29,10,29,12,29,1074,
9,29,3,29,1076,8,29,1,29,1,29,1,29,1,29,1,29,1,29,5,29,1084,8,29,10,29,12,
29,1087,9,29,3,29,1089,8,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,5,29,1098,
8,29,10,29,12,29,1101,9,29,1,29,1,29,3,29,1105,8,29,1,30,1,30,1,30,1,30,
5,30,1111,8,30,10,30,12,30,1114,9,30,3,30,1116,8,30,1,30,1,30,3,30,1120,
8,30,1,31,1,31,3,31,1124,8,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,33,1,
33,3,33,1135,8,33,1,33,3,33,1138,8,33,1,33,1,33,1,33,1,33,1,33,3,33,1145,
8,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,
34,1,34,1,34,1,34,3,34,1164,8,34,5,34,1166,8,34,10,34,12,34,1169,9,34,1,
35,3,35,1172,8,35,1,35,1,35,3,35,1176,8,35,1,35,1,35,3,35,1180,8,35,1,35,
1,35,3,35,1184,8,35,3,35,1186,8,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,5,
36,1195,8,36,10,36,12,36,1198,9,36,1,36,1,36,3,36,1202,8,36,1,37,1,37,1,
37,1,37,1,37,1,37,1,37,3,37,1211,8,37,1,38,1,38,1,39,1,39,3,39,1217,8,39,
1,39,1,39,3,39,1221,8,39,3,39,1223,8,39,1,40,1,40,1,40,1,40,5,40,1229,8,
40,10,40,12,40,1232,9,40,1,40,1,40,1,41,1,41,3,41,1238,8,41,1,41,1,41,1,
41,1,41,1,41,1,41,1,41,1,41,1,41,5,41,1249,8,41,10,41,12,41,1252,9,41,1,
41,1,41,1,41,3,41,1257,8,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,
3,41,1268,8,41,1,42,1,42,1,43,1,43,1,43,3,43,1275,8,43,1,43,1,43,3,43,1279,
8,43,1,43,1,43,1,43,1,43,1,43,1,43,5,43,1287,8,43,10,43,12,43,1290,9,43,
1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,3,44,1302,8,44,1,44,1,
44,1,44,1,44,1,44,1,44,3,44,1310,8,44,1,44,1,44,1,44,1,44,1,44,5,44,1317,
8,44,10,44,12,44,1320,9,44,1,44,1,44,1,44,3,44,1325,8,44,1,44,1,44,1,44,
1,44,1,44,1,44,3,44,1333,8,44,1,44,1,44,1,44,1,44,3,44,1339,8,44,1,44,1,
44,3,44,1343,8,44,1,44,1,44,1,44,3,44,1348,8,44,1,44,1,44,1,44,3,44,1353,
8,44,1,45,1,45,1,45,1,45,3,45,1359,8,45,1,45,1,45,1,45,1,45,1,45,1,45,1,
45,1,45,1,45,1,45,1,45,1,45,5,45,1373,8,45,10,45,12,45,1376,9,45,1,46,1,
46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,
1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,4,46,1402,8,46,11,46,12,46,1403,
1,46,1,46,1,46,1,46,1,46,1,46,1,46,5,46,1413,8,46,10,46,12,46,1416,9,46,
1,46,1,46,1,46,1,46,1,46,1,46,1,46,3,46,1425,8,46,1,46,3,46,1428,8,46,1,
46,1,46,1,46,3,46,1433,8,46,1,46,1,46,1,46,5,46,1438,8,46,10,46,12,46,1441,
9,46,3,46,1443,8,46,1,46,1,46,1,46,1,46,1,46,5,46,1450,8,46,10,46,12,46,
1453,9,46,3,46,1455,8,46,1,46,1,46,3,46,1459,8,46,1,46,3,46,1462,8,46,1,
46,3,46,1465,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,5,46,1475,8,46,
10,46,12,46,1478,9,46,3,46,1480,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,
1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,4,46,1497,8,46,11,46,12,46,1498,
1,46,1,46,3,46,1503,8,46,1,46,1,46,1,46,1,46,4,46,1509,8,46,11,46,12,46,
1510,1,46,1,46,3,46,1515,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,
46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,5,46,1538,
8,46,10,46,12,46,1541,9,46,3,46,1543,8,46,1,46,1,46,1,46,1,46,1,46,1,46,
1,46,3,46,1552,8,46,1,46,1,46,1,46,1,46,3,46,1558,8,46,1,46,1,46,1,46,1,
46,3,46,1564,8,46,1,46,1,46,1,46,1,46,3,46,1570,8,46,1,46,1,46,1,46,1,46,
1,46,1,46,1,46,1,46,3,46,1580,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,3,
46,1589,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,
1,46,1,46,1,46,1,46,1,46,1,46,5,46,1609,8,46,10,46,12,46,1612,9,46,3,46,
1614,8,46,1,46,3,46,1617,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,5,
46,1627,8,46,10,46,12,46,1630,9,46,1,47,1,47,1,47,1,47,3,47,1636,8,47,3,
47,1638,8,47,1,48,1,48,1,48,1,48,3,48,1644,8,48,1,49,1,49,1,49,1,49,1,49,
1,49,3,49,1652,8,49,1,50,1,50,1,51,1,51,1,52,1,52,1,53,1,53,3,53,1662,8,
53,1,53,1,53,1,53,1,53,3,53,1668,8,53,1,54,1,54,1,55,1,55,1,56,1,56,1,56,
1,56,5,56,1678,8,56,10,56,12,56,1681,9,56,3,56,1683,8,56,1,56,1,56,1,57,
1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,57,1,
57,1,57,1,57,1,57,1,57,1,57,5,57,1708,8,57,10,57,12,57,1711,9,57,1,57,1,
57,1,57,1,57,1,57,1,57,1,57,5,57,1720,8,57,10,57,12,57,1723,9,57,1,57,1,
57,3,57,1727,8,57,1,57,1,57,1,57,1,57,1,57,3,57,1734,8,57,1,57,1,57,5,57,
1738,8,57,10,57,12,57,1741,9,57,1,58,1,58,3,58,1745,8,58,1,59,1,59,1,59,
1,59,3,59,1751,8,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,
61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,5,62,1771,8,62,10,62,12,62,1774,9,
62,3,62,1776,8,62,1,62,1,62,1,62,1,62,1,62,5,62,1783,8,62,10,62,12,62,1786,
9,62,3,62,1788,8,62,1,62,3,62,1791,8,62,1,62,1,62,1,63,1,63,1,63,1,63,1,
63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,
1,63,1,63,1,63,1,63,1,63,3,63,1819,8,63,1,64,1,64,1,64,1,64,1,64,1,64,1,
64,1,64,1,64,3,64,1830,8,64,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,3,66,
1840,8,66,1,67,1,67,1,67,1,67,1,67,3,67,1847,8,67,1,68,1,68,1,68,1,68,1,
68,1,68,1,68,3,68,1856,8,68,1,69,1,69,1,69,1,69,1,69,3,69,1863,8,69,1,70,
1,70,1,70,1,70,3,70,1869,8,70,1,71,1,71,1,71,5,71,1874,8,71,10,71,12,71,
1877,9,71,1,72,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,3,73,1888,8,73,1,
74,1,74,1,74,1,74,1,74,3,74,1895,8,74,1,75,1,75,1,75,5,75,1900,8,75,10,75,
12,75,1903,9,75,1,76,1,76,1,76,1,76,1,76,3,76,1910,8,76,1,77,1,77,1,77,3,
77,1915,8,77,1,78,1,78,1,78,0,6,48,68,86,90,92,114,79,0,2,4,6,8,10,12,14,
16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,
64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,
110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,
146,148,150,152,154,156,0,24,2,0,26,26,157,157,2,0,49,49,97,97,2,0,74,74,
89,89,2,0,61,61,90,90,1,0,166,167,2,0,12,12,236,236,2,0,60,60,203,203,2,
0,19,19,51,51,2,0,70,70,104,104,2,0,12,12,54,54,2,0,21,21,183,183,1,0,227,
228,1,0,229,231,1,0,221,226,3,0,12,12,16,16,178,178,2,0,67,67,196,196,5,
0,47,47,86,86,115,116,170,170,219,219,1,0,119,122,2,0,71,71,144,144,3,0,
81,81,101,101,190,190,4,0,55,55,98,98,112,112,209,209,2,0,133,133,218,218,
3,0,184,185,193,193,212,212,48,0,10,12,14,14,16,17,19,21,24,26,29,34,39,
39,41,41,45,47,49,49,51,51,53,53,55,55,61,61,64,64,66,66,68,71,73,73,76,
81,84,84,86,88,90,90,92,92,95,95,97,98,100,101,103,105,107,107,109,109,112,
117,119,124,128,131,133,134,137,137,139,144,146,149,151,160,162,164,166,
171,173,185,187,190,192,195,197,199,201,202,205,207,209,209,211,213,217,
220,2221,0,158,1,0,0,0,2,161,1,0,0,0,4,164,1,0,0,0,6,825,1,0,0,0,8,828,1,
0,0,0,10,832,1,0,0,0,12,846,1,0,0,0,14,848,1,0,0,0,16,862,1,0,0,0,18,868,
1,0,0,0,20,879,1,0,0,0,22,883,1,0,0,0,24,889,1,0,0,0,26,896,1,0,0,0,28,901,
1,0,0,0,30,904,1,0,0,0,32,908,1,0,0,0,34,910,1,0,0,0,36,913,1,0,0,0,38,920,
1,0,0,0,40,925,1,0,0,0,42,936,1,0,0,0,44,938,1,0,0,0,46,940,1,0,0,0,48,971,
1,0,0,0,50,1007,1,0,0,0,52,1009,1,0,0,0,54,1017,1,0,0,0,56,1054,1,0,0,0,
58,1104,1,0,0,0,60,1119,1,0,0,0,62,1121,1,0,0,0,64,1130,1,0,0,0,66,1144,
1,0,0,0,68,1146,1,0,0,0,70,1185,1,0,0,0,72,1201,1,0,0,0,74,1203,1,0,0,0,
76,1212,1,0,0,0,78,1214,1,0,0,0,80,1224,1,0,0,0,82,1267,1,0,0,0,84,1269,
1,0,0,0,86,1278,1,0,0,0,88,1352,1,0,0,0,90,1358,1,0,0,0,92,1616,1,0,0,0,
94,1637,1,0,0,0,96,1643,1,0,0,0,98,1651,1,0,0,0,100,1653,1,0,0,0,102,1655,
1,0,0,0,104,1657,1,0,0,0,106,1659,1,0,0,0,108,1669,1,0,0,0,110,1671,1,0,
0,0,112,1673,1,0,0,0,114,1733,1,0,0,0,116,1744,1,0,0,0,118,1750,1,0,0,0,
120,1752,1,0,0,0,122,1757,1,0,0,0,124,1763,1,0,0,0,126,1818,1,0,0,0,128,
1829,1,0,0,0,130,1831,1,0,0,0,132,1839,1,0,0,0,134,1846,1,0,0,0,136,1855,
1,0,0,0,138,1862,1,0,0,0,140,1868,1,0,0,0,142,1870,1,0,0,0,144,1878,1,0,
0,0,146,1887,1,0,0,0,148,1894,1,0,0,0,150,1896,1,0,0,0,152,1909,1,0,0,0,
154,1914,1,0,0,0,156,1916,1,0,0,0,158,159,3,6,3,0,159,160,5,0,0,1,160,1,
1,0,0,0,161,162,3,84,42,0,162,163,5,0,0,1,163,3,1,0,0,0,164,165,3,32,16,
0,165,166,5,0,0,1,166,5,1,0,0,0,167,826,3,8,4,0,168,169,5,206,0,0,169,826,
3,152,76,0,170,171,5,206,0,0,171,172,3,152,76,0,172,173,5,1,0,0,173,174,
3,152,76,0,174,826,1,0,0,0,175,176,5,36,0,0,176,180,5,168,0,0,177,178,5,
87,0,0,178,179,5,126,0,0,179,181,5,63,0,0,180,177,1,0,0,0,180,181,1,0,0,
0,181,182,1,0,0,0,182,185,3,142,71,0,183,184,5,216,0,0,184,186,3,18,9,0,
185,183,1,0,0,0,185,186,1,0,0,0,186,826,1,0,0,0,187,188,5,56,0,0,188,191,
5,168,0,0,189,190,5,87,0,0,190,192,5,63,0,0,191,189,1,0,0,0,191,192,1,0,
0,0,192,193,1,0,0,0,193,195,3,142,71,0,194,196,7,0,0,0,195,194,1,0,0,0,195,
196,1,0,0,0,196,826,1,0,0,0,197,198,5,13,0,0,198,199,5,168,0,0,199,200,3,
142,71,0,200,201,5,152,0,0,201,202,5,194,0,0,202,203,3,152,76,0,203,826,
1,0,0,0,204,205,5,36,0,0,205,209,5,186,0,0,206,207,5,87,0,0,207,208,5,126,
0,0,208,210,5,63,0,0,209,206,1,0,0,0,209,210,1,0,0,0,210,211,1,0,0,0,211,
213,3,142,71,0,212,214,3,80,40,0,213,212,1,0,0,0,213,214,1,0,0,0,214,217,
1,0,0,0,215,216,5,32,0,0,216,218,3,94,47,0,217,215,1,0,0,0,217,218,1,0,0,
0,218,221,1,0,0,0,219,220,5,216,0,0,220,222,3,18,9,0,221,219,1,0,0,0,221,
222,1,0,0,0,222,223,1,0,0,0,223,229,5,18,0,0,224,230,3,8,4,0,225,226,5,2,
0,0,226,227,3,8,4,0,227,228,5,3,0,0,228,230,1,0,0,0,229,224,1,0,0,0,229,
225,1,0,0,0,230,236,1,0,0,0,231,233,5,216,0,0,232,234,5,123,0,0,233,232,
1,0,0,0,233,234,1,0,0,0,234,235,1,0,0,0,235,237,5,45,0,0,236,231,1,0,0,0,
236,237,1,0,0,0,237,826,1,0,0,0,238,239,5,36,0,0,239,243,5,186,0,0,240,241,
5,87,0,0,241,242,5,126,0,0,242,244,5,63,0,0,243,240,1,0,0,0,243,244,1,0,
0,0,244,245,1,0,0,0,245,246,3,142,71,0,246,247,5,2,0,0,247,252,3,12,6,0,
248,249,5,4,0,0,249,251,3,12,6,0,250,248,1,0,0,0,251,254,1,0,0,0,252,250,
1,0,0,0,252,253,1,0,0,0,253,255,1,0,0,0,254,252,1,0,0,0,255,258,5,3,0,0,
256,257,5,32,0,0,257,259,3,94,47,0,258,256,1,0,0,0,258,259,1,0,0,0,259,262,
1,0,0,0,260,261,5,216,0,0,261,263,3,18,9,0,262,260,1,0,0,0,262,263,1,0,0,
0,263,826,1,0,0,0,264,265,5,56,0,0,265,268,5,186,0,0,266,267,5,87,0,0,267,
269,5,63,0,0,268,266,1,0,0,0,268,269,1,0,0,0,269,270,1,0,0,0,270,826,3,142,
71,0,271,272,5,93,0,0,272,273,5,96,0,0,273,275,3,142,71,0,274,276,3,80,40,
0,275,274,1,0,0,0,275,276,1,0,0,0,276,277,1,0,0,0,277,278,3,8,4,0,278,826,
1,0,0,0,279,280,5,50,0,0,280,281,5,74,0,0,281,284,3,142,71,0,282,283,5,215,
0,0,283,285,3,86,43,0,284,282,1,0,0,0,284,285,1,0,0,0,285,826,1,0,0,0,286,
287,5,197,0,0,287,288,5,186,0,0,288,826,3,142,71,0,289,290,5,13,0,0,290,
293,5,186,0,0,291,292,5,87,0,0,292,294,5,63,0,0,293,291,1,0,0,0,293,294,
1,0,0,0,294,295,1,0,0,0,295,296,3,142,71,0,296,297,5,152,0,0,297,298,5,194,
0,0,298,299,3,142,71,0,299,826,1,0,0,0,300,301,5,13,0,0,301,304,5,186,0,
0,302,303,5,87,0,0,303,305,5,63,0,0,304,302,1,0,0,0,304,305,1,0,0,0,305,
306,1,0,0,0,306,307,3,142,71,0,307,308,5,152,0,0,308,311,5,30,0,0,309,310,
5,87,0,0,310,312,5,63,0,0,311,309,1,0,0,0,311,312,1,0,0,0,312,313,1,0,0,
0,313,314,3,152,76,0,314,315,5,194,0,0,315,316,3,152,76,0,316,826,1,0,0,
0,317,318,5,13,0,0,318,321,5,186,0,0,319,320,5,87,0,0,320,322,5,63,0,0,321,
319,1,0,0,0,321,322,1,0,0,0,322,323,1,0,0,0,323,324,3,142,71,0,324,325,5,
56,0,0,325,328,5,30,0,0,326,327,5,87,0,0,327,329,5,63,0,0,328,326,1,0,0,
0,328,329,1,0,0,0,329,330,1,0,0,0,330,331,3,142,71,0,331,826,1,0,0,0,332,
333,5,13,0,0,333,336,5,186,0,0,334,335,5,87,0,0,335,337,5,63,0,0,336,334,
1,0,0,0,336,337,1,0,0,0,337,338,1,0,0,0,338,339,3,142,71,0,339,340,5,10,
0,0,340,344,5,30,0,0,341,342,5,87,0,0,342,343,5,126,0,0,343,345,5,63,0,0,
344,341,1,0,0,0,344,345,1,0,0,0,345,346,1,0,0,0,346,347,3,14,7,0,347,826,
1,0,0,0,348,349,5,14,0,0,349,352,3,142,71,0,350,351,5,216,0,0,351,353,3,
18,9,0,352,350,1,0,0,0,352,353,1,0,0,0,353,826,1,0,0,0,354,355,5,36,0,0,
355,356,5,199,0,0,356,357,3,142,71,0,357,370,5,18,0,0,358,359,5,2,0,0,359,
364,3,22,11,0,360,361,5,4,0,0,361,363,3,22,11,0,362,360,1,0,0,0,363,366,
1,0,0,0,364,362,1,0,0,0,364,365,1,0,0,0,365,367,1,0,0,0,366,364,1,0,0,0,
367,368,5,3,0,0,368,371,1,0,0,0,369,371,3,114,57,0,370,358,1,0,0,0,370,369,
1,0,0,0,371,826,1,0,0,0,372,375,5,36,0,0,373,374,5,135,0,0,374,376,5,154,
0,0,375,373,1,0,0,0,375,376,1,0,0,0,376,377,1,0,0,0,377,378,5,213,0,0,378,
381,3,142,71,0,379,380,5,171,0,0,380,382,7,1,0,0,381,379,1,0,0,0,381,382,
1,0,0,0,382,383,1,0,0,0,383,384,5,18,0,0,384,385,3,8,4,0,385,826,1,0,0,0,
386,387,5,56,0,0,387,390,5,213,0,0,388,389,5,87,0,0,389,391,5,63,0,0,390,
388,1,0,0,0,390,391,1,0,0,0,391,392,1,0,0,0,392,826,3,142,71,0,393,394,5,
36,0,0,394,395,5,114,0,0,395,399,5,213,0,0,396,397,5,87,0,0,397,398,5,126,
0,0,398,400,5,63,0,0,399,396,1,0,0,0,399,400,1,0,0,0,400,401,1,0,0,0,401,
404,3,142,71,0,402,403,5,32,0,0,403,405,3,94,47,0,404,402,1,0,0,0,404,405,
1,0,0,0,405,408,1,0,0,0,406,407,5,216,0,0,407,409,3,18,9,0,408,406,1,0,0,
0,408,409,1,0,0,0,409,410,1,0,0,0,410,416,5,18,0,0,411,417,3,8,4,0,412,413,
5,2,0,0,413,414,3,8,4,0,414,415,5,3,0,0,415,417,1,0,0,0,416,411,1,0,0,0,
416,412,1,0,0,0,417,826,1,0,0,0,418,419,5,56,0,0,419,420,5,114,0,0,420,423,
5,213,0,0,421,422,5,87,0,0,422,424,5,63,0,0,423,421,1,0,0,0,423,424,1,0,
0,0,424,425,1,0,0,0,425,826,3,142,71,0,426,427,5,151,0,0,427,428,5,114,0,
0,428,429,5,213,0,0,429,430,3,142,71,0,430,431,5,215,0,0,431,432,3,86,43,
0,432,826,1,0,0,0,433,436,5,36,0,0,434,435,5,135,0,0,435,437,5,154,0,0,436,
434,1,0,0,0,436,437,1,0,0,0,437,439,1,0,0,0,438,440,5,189,0,0,439,438,1,
0,0,0,439,440,1,0,0,0,440,441,1,0,0,0,441,442,5,76,0,0,442,443,3,142,71,
0,443,452,5,2,0,0,444,449,3,22,11,0,445,446,5,4,0,0,446,448,3,22,11,0,447,
445,1,0,0,0,448,451,1,0,0,0,449,447,1,0,0,0,449,450,1,0,0,0,450,453,1,0,
0,0,451,449,1,0,0,0,452,444,1,0,0,0,452,453,1,0,0,0,453,454,1,0,0,0,454,
455,5,3,0,0,455,456,5,159,0,0,456,459,3,114,57,0,457,458,5,32,0,0,458,460,
3,94,47,0,459,457,1,0,0,0,459,460,1,0,0,0,460,461,1,0,0,0,461,462,3,24,12,
0,462,463,3,32,16,0,463,826,1,0,0,0,464,465,5,13,0,0,465,466,5,76,0,0,466,
468,3,142,71,0,467,469,3,112,56,0,468,467,1,0,0,0,468,469,1,0,0,0,469,470,
1,0,0,0,470,471,3,28,14,0,471,826,1,0,0,0,472,474,5,56,0,0,473,475,5,189,
0,0,474,473,1,0,0,0,474,475,1,0,0,0,475,476,1,0,0,0,476,479,5,76,0,0,477,
478,5,87,0,0,478,480,5,63,0,0,479,477,1,0,0,0,479,480,1,0,0,0,480,481,1,
0,0,0,481,483,3,142,71,0,482,484,3,112,56,0,483,482,1,0,0,0,483,484,1,0,
0,0,484,826,1,0,0,0,485,486,5,24,0,0,486,487,3,142,71,0,487,496,5,2,0,0,
488,493,3,138,69,0,489,490,5,4,0,0,490,492,3,138,69,0,491,489,1,0,0,0,492,
495,1,0,0,0,493,491,1,0,0,0,493,494,1,0,0,0,494,497,1,0,0,0,495,493,1,0,
0,0,496,488,1,0,0,0,496,497,1,0,0,0,497,498,1,0,0,0,498,499,5,3,0,0,499,
826,1,0,0,0,500,501,5,36,0,0,501,502,5,162,0,0,502,506,3,152,76,0,503,504,
5,216,0,0,504,505,5,11,0,0,505,507,3,146,73,0,506,503,1,0,0,0,506,507,1,
0,0,0,507,826,1,0,0,0,508,509,5,56,0,0,509,510,5,162,0,0,510,826,3,152,76,
0,511,512,5,78,0,0,512,513,3,150,75,0,513,514,5,194,0,0,514,519,3,148,74,
0,515,516,5,4,0,0,516,518,3,148,74,0,517,515,1,0,0,0,518,521,1,0,0,0,519,
517,1,0,0,0,519,520,1,0,0,0,520,525,1,0,0,0,521,519,1,0,0,0,522,523,5,216,
0,0,523,524,5,11,0,0,524,526,5,134,0,0,525,522,1,0,0,0,525,526,1,0,0,0,526,
530,1,0,0,0,527,528,5,79,0,0,528,529,5,23,0,0,529,531,3,146,73,0,530,527,
1,0,0,0,530,531,1,0,0,0,531,826,1,0,0,0,532,536,5,160,0,0,533,534,5,11,0,
0,534,535,5,134,0,0,535,537,5,72,0,0,536,533,1,0,0,0,536,537,1,0,0,0,537,
538,1,0,0,0,538,539,3,150,75,0,539,540,5,74,0,0,540,545,3,148,74,0,541,542,
5,4,0,0,542,544,3,148,74,0,543,541,1,0,0,0,544,547,1,0,0,0,545,543,1,0,0,
0,545,546,1,0,0,0,546,551,1,0,0,0,547,545,1,0,0,0,548,549,5,79,0,0,549,550,
5,23,0,0,550,552,3,146,73,0,551,548,1,0,0,0,551,552,1,0,0,0,552,826,1,0,
0,0,553,554,5,175,0,0,554,558,5,162,0,0,555,559,5,12,0,0,556,559,5,124,0,
0,557,559,3,152,76,0,558,555,1,0,0,0,558,556,1,0,0,0,558,557,1,0,0,0,559,
826,1,0,0,0,560,571,5,78,0,0,561,566,3,140,70,0,562,563,5,4,0,0,563,565,
3,140,70,0,564,562,1,0,0,0,565,568,1,0,0,0,566,564,1,0,0,0,566,567,1,0,0,
0,567,572,1,0,0,0,568,566,1,0,0,0,569,570,5,12,0,0,570,572,5,146,0,0,571,
561,1,0,0,0,571,569,1,0,0,0,572,573,1,0,0,0,573,575,5,132,0,0,574,576,5,
186,0,0,575,574,1,0,0,0,575,576,1,0,0,0,576,577,1,0,0,0,577,578,3,142,71,
0,578,579,5,194,0,0,579,583,3,148,74,0,580,581,5,216,0,0,581,582,5,78,0,
0,582,584,5,134,0,0,583,580,1,0,0,0,583,584,1,0,0,0,584,826,1,0,0,0,585,
589,5,160,0,0,586,587,5,78,0,0,587,588,5,134,0,0,588,590,5,72,0,0,589,586,
1,0,0,0,589,590,1,0,0,0,590,601,1,0,0,0,591,596,3,140,70,0,592,593,5,4,0,
0,593,595,3,140,70,0,594,592,1,0,0,0,595,598,1,0,0,0,596,594,1,0,0,0,596,
597,1,0,0,0,597,602,1,0,0,0,598,596,1,0,0,0,599,600,5,12,0,0,600,602,5,146,
0,0,601,591,1,0,0,0,601,599,1,0,0,0,602,603,1,0,0,0,603,605,5,132,0,0,604,
606,5,186,0,0,605,604,1,0,0,0,605,606,1,0,0,0,606,607,1,0,0,0,607,608,3,
142,71,0,608,609,5,74,0,0,609,610,3,148,74,0,610,826,1,0,0,0,611,612,5,177,
0,0,612,618,5,80,0,0,613,615,5,132,0,0,614,616,5,186,0,0,615,614,1,0,0,0,
615,616,1,0,0,0,616,617,1,0,0,0,617,619,3,142,71,0,618,613,1,0,0,0,618,619,
1,0,0,0,619,826,1,0,0,0,620,622,5,64,0,0,621,623,5,14,0,0,622,621,1,0,0,
0,622,623,1,0,0,0,623,625,1,0,0,0,624,626,5,211,0,0,625,624,1,0,0,0,625,
626,1,0,0,0,626,638,1,0,0,0,627,628,5,2,0,0,628,633,3,132,66,0,629,630,5,
4,0,0,630,632,3,132,66,0,631,629,1,0,0,0,632,635,1,0,0,0,633,631,1,0,0,0,
633,634,1,0,0,0,634,636,1,0,0,0,635,633,1,0,0,0,636,637,5,3,0,0,637,639,
1,0,0,0,638,627,1,0,0,0,638,639,1,0,0,0,639,640,1,0,0,0,640,826,3,6,3,0,
641,642,5,177,0,0,642,643,5,36,0,0,643,644,5,186,0,0,644,826,3,142,71,0,
645,646,5,177,0,0,646,647,5,36,0,0,647,648,5,213,0,0,648,826,3,142,71,0,
649,650,5,177,0,0,650,651,5,36,0,0,651,652,5,114,0,0,652,653,5,213,0,0,653,
826,3,142,71,0,654,655,5,177,0,0,655,656,5,36,0,0,656,657,5,76,0,0,657,659,
3,142,71,0,658,660,3,112,56,0,659,658,1,0,0,0,659,660,1,0,0,0,660,826,1,
0,0,0,661,662,5,177,0,0,662,665,5,187,0,0,663,664,7,2,0,0,664,666,3,142,
71,0,665,663,1,0,0,0,665,666,1,0,0,0,666,673,1,0,0,0,667,668,5,108,0,0,668,
671,3,94,47,0,669,670,5,59,0,0,670,672,3,94,47,0,671,669,1,0,0,0,671,672,
1,0,0,0,672,674,1,0,0,0,673,667,1,0,0,0,673,674,1,0,0,0,674,826,1,0,0,0,
675,676,5,177,0,0,676,679,5,169,0,0,677,678,7,2,0,0,678,680,3,152,76,0,679,
677,1,0,0,0,679,680,1,0,0,0,680,687,1,0,0,0,681,682,5,108,0,0,682,685,3,
94,47,0,683,684,5,59,0,0,684,686,3,94,47,0,685,683,1,0,0,0,685,686,1,0,0,
0,686,688,1,0,0,0,687,681,1,0,0,0,687,688,1,0,0,0,688,826,1,0,0,0,689,690,
5,177,0,0,690,697,5,29,0,0,691,692,5,108,0,0,692,695,3,94,47,0,693,694,5,
59,0,0,694,696,3,94,47,0,695,693,1,0,0,0,695,696,1,0,0,0,696,698,1,0,0,0,
697,691,1,0,0,0,697,698,1,0,0,0,698,826,1,0,0,0,699,700,5,177,0,0,700,701,
5,31,0,0,701,702,7,2,0,0,702,826,3,142,71,0,703,704,5,177,0,0,704,705,5,
181,0,0,705,706,5,72,0,0,706,826,3,142,71,0,707,708,5,177,0,0,708,709,5,
181,0,0,709,710,5,72,0,0,710,711,5,2,0,0,711,712,3,54,27,0,712,713,5,3,0,
0,713,826,1,0,0,0,714,716,5,177,0,0,715,717,5,39,0,0,716,715,1,0,0,0,716,
717,1,0,0,0,717,718,1,0,0,0,718,721,5,163,0,0,719,720,7,2,0,0,720,722,3,
152,76,0,721,719,1,0,0,0,721,722,1,0,0,0,722,826,1,0,0,0,723,724,5,177,0,
0,724,725,5,162,0,0,725,728,5,80,0,0,726,727,7,2,0,0,727,729,3,152,76,0,
728,726,1,0,0,0,728,729,1,0,0,0,729,826,1,0,0,0,730,731,5,52,0,0,731,826,
3,142,71,0,732,733,5,51,0,0,733,826,3,142,71,0,734,735,5,177,0,0,735,742,
5,77,0,0,736,737,5,108,0,0,737,740,3,94,47,0,738,739,5,59,0,0,739,741,3,
94,47,0,740,738,1,0,0,0,740,741,1,0,0,0,741,743,1,0,0,0,742,736,1,0,0,0,
742,743,1,0,0,0,743,826,1,0,0,0,744,745,5,177,0,0,745,752,5,174,0,0,746,
747,5,108,0,0,747,750,3,94,47,0,748,749,5,59,0,0,749,751,3,94,47,0,750,748,
1,0,0,0,750,751,1,0,0,0,751,753,1,0,0,0,752,746,1,0,0,0,752,753,1,0,0,0,
753,826,1,0,0,0,754,755,5,175,0,0,755,756,5,174,0,0,756,757,3,142,71,0,757,
758,5,221,0,0,758,759,3,84,42,0,759,826,1,0,0,0,760,761,5,155,0,0,761,762,
5,174,0,0,762,826,3,142,71,0,763,764,5,180,0,0,764,773,5,195,0,0,765,770,
3,134,67,0,766,767,5,4,0,0,767,769,3,134,67,0,768,766,1,0,0,0,769,772,1,
0,0,0,770,768,1,0,0,0,770,771,1,0,0,0,771,774,1,0,0,0,772,770,1,0,0,0,773,
765,1,0,0,0,773,774,1,0,0,0,774,826,1,0,0,0,775,777,5,33,0,0,776,778,5,217,
0,0,777,776,1,0,0,0,777,778,1,0,0,0,778,826,1,0,0,0,779,781,5,164,0,0,780,
782,5,217,0,0,781,780,1,0,0,0,781,782,1,0,0,0,782,826,1,0,0,0,783,784,5,
145,0,0,784,785,3,152,76,0,785,786,5,74,0,0,786,787,3,6,3,0,787,826,1,0,
0,0,788,789,5,48,0,0,789,790,5,145,0,0,790,826,3,152,76,0,791,792,5,62,0,
0,792,802,3,152,76,0,793,794,5,208,0,0,794,799,3,84,42,0,795,796,5,4,0,0,
796,798,3,84,42,0,797,795,1,0,0,0,798,801,1,0,0,0,799,797,1,0,0,0,799,800,
1,0,0,0,800,803,1,0,0,0,801,799,1,0,0,0,802,793,1,0,0,0,802,803,1,0,0,0,
803,826,1,0,0,0,804,805,5,52,0,0,805,806,5,92,0,0,806,826,3,152,76,0,807,
808,5,52,0,0,808,809,5,139,0,0,809,826,3,152,76,0,810,811,5,205,0,0,811,
812,3,142,71,0,812,813,5,175,0,0,813,818,3,130,65,0,814,815,5,4,0,0,815,
817,3,130,65,0,816,814,1,0,0,0,817,820,1,0,0,0,818,816,1,0,0,0,818,819,1,
0,0,0,819,823,1,0,0,0,820,818,1,0,0,0,821,822,5,215,0,0,822,824,3,86,43,
0,823,821,1,0,0,0,823,824,1,0,0,0,824,826,1,0,0,0,825,167,1,0,0,0,825,168,
1,0,0,0,825,170,1,0,0,0,825,175,1,0,0,0,825,187,1,0,0,0,825,197,1,0,0,0,
825,204,1,0,0,0,825,238,1,0,0,0,825,264,1,0,0,0,825,271,1,0,0,0,825,279,
1,0,0,0,825,286,1,0,0,0,825,289,1,0,0,0,825,300,1,0,0,0,825,317,1,0,0,0,
825,332,1,0,0,0,825,348,1,0,0,0,825,354,1,0,0,0,825,372,1,0,0,0,825,386,
1,0,0,0,825,393,1,0,0,0,825,418,1,0,0,0,825,426,1,0,0,0,825,433,1,0,0,0,
825,464,1,0,0,0,825,472,1,0,0,0,825,485,1,0,0,0,825,500,1,0,0,0,825,508,
1,0,0,0,825,511,1,0,0,0,825,532,1,0,0,0,825,553,1,0,0,0,825,560,1,0,0,0,
825,585,1,0,0,0,825,611,1,0,0,0,825,620,1,0,0,0,825,641,1,0,0,0,825,645,
1,0,0,0,825,649,1,0,0,0,825,654,1,0,0,0,825,661,1,0,0,0,825,675,1,0,0,0,
825,689,1,0,0,0,825,699,1,0,0,0,825,703,1,0,0,0,825,707,1,0,0,0,825,714,
1,0,0,0,825,723,1,0,0,0,825,730,1,0,0,0,825,732,1,0,0,0,825,734,1,0,0,0,
825,744,1,0,0,0,825,754,1,0,0,0,825,760,1,0,0,0,825,763,1,0,0,0,825,775,
1,0,0,0,825,779,1,0,0,0,825,783,1,0,0,0,825,788,1,0,0,0,825,791,1,0,0,0,
825,804,1,0,0,0,825,807,1,0,0,0,825,810,1,0,0,0,826,7,1,0,0,0,827,829,3,
10,5,0,828,827,1,0,0,0,828,829,1,0,0,0,829,830,1,0,0,0,830,831,3,46,23,0,
831,9,1,0,0,0,832,834,5,216,0,0,833,835,5,150,0,0,834,833,1,0,0,0,834,835,
1,0,0,0,835,836,1,0,0,0,836,841,3,62,31,0,837,838,5,4,0,0,838,840,3,62,31,
0,839,837,1,0,0,0,840,843,1,0,0,0,841,839,1,0,0,0,841,842,1,0,0,0,842,11,
1,0,0,0,843,841,1,0,0,0,844,847,3,14,7,0,845,847,3,16,8,0,846,844,1,0,0,
0,846,845,1,0,0,0,847,13,1,0,0,0,848,849,3,152,76,0,849,852,3,114,57,0,850,
851,5,126,0,0,851,853,5,127,0,0,852,850,1,0,0,0,852,853,1,0,0,0,853,856,
1,0,0,0,854,855,5,32,0,0,855,857,3,94,47,0,856,854,1,0,0,0,856,857,1,0,0,
0,857,860,1,0,0,0,858,859,5,216,0,0,859,861,3,18,9,0,860,858,1,0,0,0,860,
861,1,0,0,0,861,15,1,0,0,0,862,863,5,108,0,0,863,866,3,142,71,0,864,865,
7,3,0,0,865,867,5,147,0,0,866,864,1,0,0,0,866,867,1,0,0,0,867,17,1,0,0,0,
868,869,5,2,0,0,869,874,3,20,10,0,870,871,5,4,0,0,871,873,3,20,10,0,872,
870,1,0,0,0,873,876,1,0,0,0,874,872,1,0,0,0,874,875,1,0,0,0,875,877,1,0,
0,0,876,874,1,0,0,0,877,878,5,3,0,0,878,19,1,0,0,0,879,880,3,152,76,0,880,
881,5,221,0,0,881,882,3,84,42,0,882,21,1,0,0,0,883,884,3,152,76,0,884,885,
3,114,57,0,885,23,1,0,0,0,886,888,3,26,13,0,887,886,1,0,0,0,888,891,1,0,
0,0,889,887,1,0,0,0,889,890,1,0,0,0,890,25,1,0,0,0,891,889,1,0,0,0,892,893,
5,103,0,0,893,897,3,38,19,0,894,897,3,40,20,0,895,897,3,42,21,0,896,892,
1,0,0,0,896,894,1,0,0,0,896,895,1,0,0,0,897,27,1,0,0,0,898,900,3,30,15,0,
899,898,1,0,0,0,900,903,1,0,0,0,901,899,1,0,0,0,901,902,1,0,0,0,902,29,1,
0,0,0,903,901,1,0,0,0,904,905,3,42,21,0,905,31,1,0,0,0,906,909,3,34,17,0,
907,909,3,36,18,0,908,906,1,0,0,0,908,907,1,0,0,0,909,33,1,0,0,0,910,911,
5,158,0,0,911,912,3,84,42,0,912,35,1,0,0,0,913,916,5,66,0,0,914,915,5,117,
0,0,915,917,3,44,22,0,916,914,1,0,0,0,916,917,1,0,0,0,917,37,1,0,0,0,918,
921,5,179,0,0,919,921,3,152,76,0,920,918,1,0,0,0,920,919,1,0,0,0,921,39,
1,0,0,0,922,926,5,53,0,0,923,924,5,126,0,0,924,926,5,53,0,0,925,922,1,0,
0,0,925,923,1,0,0,0,926,41,1,0,0,0,927,928,5,159,0,0,928,929,5,127,0,0,929,
930,5,132,0,0,930,931,5,127,0,0,931,937,5,92,0,0,932,933,5,25,0,0,933,934,
5,132,0,0,934,935,5,127,0,0,935,937,5,92,0,0,936,927,1,0,0,0,936,932,1,0,
0,0,937,43,1,0,0,0,938,939,3,152,76,0,939,45,1,0,0,0,940,951,3,48,24,0,941,
942,5,136,0,0,942,943,5,23,0,0,943,948,3,52,26,0,944,945,5,4,0,0,945,947,
3,52,26,0,946,944,1,0,0,0,947,950,1,0,0,0,948,946,1,0,0,0,948,949,1,0,0,
0,949,952,1,0,0,0,950,948,1,0,0,0,951,941,1,0,0,0,951,952,1,0,0,0,952,958,
1,0,0,0,953,954,5,131,0,0,954,956,5,236,0,0,955,957,7,4,0,0,956,955,1,0,
0,0,956,957,1,0,0,0,957,959,1,0,0,0,958,953,1,0,0,0,958,959,1,0,0,0,959,
969,1,0,0,0,960,961,5,109,0,0,961,968,7,5,0,0,962,963,5,68,0,0,963,964,5,
70,0,0,964,965,5,236,0,0,965,966,5,167,0,0,966,968,5,133,0,0,967,960,1,0,
0,0,967,962,1,0,0,0,967,968,1,0,0,0,968,970,1,0,0,0,969,967,1,0,0,0,969,
970,1,0,0,0,970,47,1,0,0,0,971,972,6,24,-1,0,972,973,3,50,25,0,973,988,1,
0,0,0,974,975,10,2,0,0,975,977,5,94,0,0,976,978,3,64,32,0,977,976,1,0,0,
0,977,978,1,0,0,0,978,979,1,0,0,0,979,987,3,48,24,3,980,981,10,1,0,0,981,
983,7,6,0,0,982,984,3,64,32,0,983,982,1,0,0,0,983,984,1,0,0,0,984,985,1,
0,0,0,985,987,3,48,24,2,986,974,1,0,0,0,986,980,1,0,0,0,987,990,1,0,0,0,
988,986,1,0,0,0,988,989,1,0,0,0,989,49,1,0,0,0,990,988,1,0,0,0,991,1008,
3,54,27,0,992,993,5,186,0,0,993,1008,3,142,71,0,994,995,5,210,0,0,995,1000,
3,84,42,0,996,997,5,4,0,0,997,999,3,84,42,0,998,996,1,0,0,0,999,1002,1,0,
0,0,1000,998,1,0,0,0,1000,1001,1,0,0,0,1001,1008,1,0,0,0,1002,1000,1,0,0,
0,1003,1004,5,2,0,0,1004,1005,3,46,23,0,1005,1006,5,3,0,0,1006,1008,1,0,
0,0,1007,991,1,0,0,0,1007,992,1,0,0,0,1007,994,1,0,0,0,1007,1003,1,0,0,0,
1008,51,1,0,0,0,1009,1011,3,84,42,0,1010,1012,7,7,0,0,1011,1010,1,0,0,0,
1011,1012,1,0,0,0,1012,1015,1,0,0,0,1013,1014,5,129,0,0,1014,1016,7,8,0,
0,1015,1013,1,0,0,0,1015,1016,1,0,0,0,1016,53,1,0,0,0,1017,1019,5,172,0,
0,1018,1020,3,64,32,0,1019,1018,1,0,0,0,1019,1020,1,0,0,0,1020,1021,1,0,
0,0,1021,1026,3,66,33,0,1022,1023,5,4,0,0,1023,1025,3,66,33,0,1024,1022,
1,0,0,0,1025,1028,1,0,0,0,1026,1024,1,0,0,0,1026,1027,1,0,0,0,1027,1038,
1,0,0,0,1028,1026,1,0,0,0,1029,1030,5,74,0,0,1030,1035,3,68,34,0,1031,1032,
5,4,0,0,1032,1034,3,68,34,0,1033,1031,1,0,0,0,1034,1037,1,0,0,0,1035,1033,
1,0,0,0,1035,1036,1,0,0,0,1036,1039,1,0,0,0,1037,1035,1,0,0,0,1038,1029,
1,0,0,0,1038,1039,1,0,0,0,1039,1042,1,0,0,0,1040,1041,5,215,0,0,1041,1043,
3,86,43,0,1042,1040,1,0,0,0,1042,1043,1,0,0,0,1043,1047,1,0,0,0,1044,1045,
5,82,0,0,1045,1046,5,23,0,0,1046,1048,3,56,28,0,1047,1044,1,0,0,0,1047,1048,
1,0,0,0,1048,1051,1,0,0,0,1049,1050,5,85,0,0,1050,1052,3,86,43,0,1051,1049,
1,0,0,0,1051,1052,1,0,0,0,1052,55,1,0,0,0,1053,1055,3,64,32,0,1054,1053,
1,0,0,0,1054,1055,1,0,0,0,1055,1056,1,0,0,0,1056,1061,3,58,29,0,1057,1058,
5,4,0,0,1058,1060,3,58,29,0,1059,1057,1,0,0,0,1060,1063,1,0,0,0,1061,1059,
1,0,0,0,1061,1062,1,0,0,0,1062,57,1,0,0,0,1063,1061,1,0,0,0,1064,1105,3,
60,30,0,1065,1066,5,165,0,0,1066,1075,5,2,0,0,1067,1072,3,84,42,0,1068,1069,
5,4,0,0,1069,1071,3,84,42,0,1070,1068,1,0,0,0,1071,1074,1,0,0,0,1072,1070,
1,0,0,0,1072,1073,1,0,0,0,1073,1076,1,0,0,0,1074,1072,1,0,0,0,1075,1067,
1,0,0,0,1075,1076,1,0,0,0,1076,1077,1,0,0,0,1077,1105,5,3,0,0,1078,1079,
5,38,0,0,1079,1088,5,2,0,0,1080,1085,3,84,42,0,1081,1082,5,4,0,0,1082,1084,
3,84,42,0,1083,1081,1,0,0,0,1084,1087,1,0,0,0,1085,1083,1,0,0,0,1085,1086,
1,0,0,0,1086,1089,1,0,0,0,1087,1085,1,0,0,0,1088,1080,1,0,0,0,1088,1089,
1,0,0,0,1089,1090,1,0,0,0,1090,1105,5,3,0,0,1091,1092,5,83,0,0,1092,1093,
5,176,0,0,1093,1094,5,2,0,0,1094,1099,3,60,30,0,1095,1096,5,4,0,0,1096,1098,
3,60,30,0,1097,1095,1,0,0,0,1098,1101,1,0,0,0,1099,1097,1,0,0,0,1099,1100,
1,0,0,0,1100,1102,1,0,0,0,1101,1099,1,0,0,0,1102,1103,5,3,0,0,1103,1105,
1,0,0,0,1104,1064,1,0,0,0,1104,1065,1,0,0,0,1104,1078,1,0,0,0,1104,1091,
1,0,0,0,1105,59,1,0,0,0,1106,1115,5,2,0,0,1107,1112,3,84,42,0,1108,1109,
5,4,0,0,1109,1111,3,84,42,0,1110,1108,1,0,0,0,1111,1114,1,0,0,0,1112,1110,
1,0,0,0,1112,1113,1,0,0,0,1113,1116,1,0,0,0,1114,1112,1,0,0,0,1115,1107,
1,0,0,0,1115,1116,1,0,0,0,1116,1117,1,0,0,0,1117,1120,5,3,0,0,1118,1120,
3,84,42,0,1119,1106,1,0,0,0,1119,1118,1,0,0,0,1120,61,1,0,0,0,1121,1123,
3,152,76,0,1122,1124,3,80,40,0,1123,1122,1,0,0,0,1123,1124,1,0,0,0,1124,
1125,1,0,0,0,1125,1126,5,18,0,0,1126,1127,5,2,0,0,1127,1128,3,8,4,0,1128,
1129,5,3,0,0,1129,63,1,0,0,0,1130,1131,7,9,0,0,1131,65,1,0,0,0,1132,1137,
3,84,42,0,1133,1135,5,18,0,0,1134,1133,1,0,0,0,1134,1135,1,0,0,0,1135,1136,
1,0,0,0,1136,1138,3,152,76,0,1137,1134,1,0,0,0,1137,1138,1,0,0,0,1138,1145,
1,0,0,0,1139,1140,3,142,71,0,1140,1141,5,1,0,0,1141,1142,5,229,0,0,1142,
1145,1,0,0,0,1143,1145,5,229,0,0,1144,1132,1,0,0,0,1144,1139,1,0,0,0,1144,
1143,1,0,0,0,1145,67,1,0,0,0,1146,1147,6,34,-1,0,1147,1148,3,74,37,0,1148,
1167,1,0,0,0,1149,1163,10,2,0,0,1150,1151,5,37,0,0,1151,1152,5,102,0,0,1152,
1164,3,74,37,0,1153,1154,3,70,35,0,1154,1155,5,102,0,0,1155,1156,3,68,34,
0,1156,1157,3,72,36,0,1157,1164,1,0,0,0,1158,1159,5,118,0,0,1159,1160,3,
70,35,0,1160,1161,5,102,0,0,1161,1162,3,74,37,0,1162,1164,1,0,0,0,1163,1150,
1,0,0,0,1163,1153,1,0,0,0,1163,1158,1,0,0,0,1164,1166,1,0,0,0,1165,1149,
1,0,0,0,1166,1169,1,0,0,0,1167,1165,1,0,0,0,1167,1168,1,0,0,0,1168,69,1,
0,0,0,1169,1167,1,0,0,0,1170,1172,5,91,0,0,1171,1170,1,0,0,0,1171,1172,1,
0,0,0,1172,1186,1,0,0,0,1173,1175,5,106,0,0,1174,1176,5,138,0,0,1175,1174,
1,0,0,0,1175,1176,1,0,0,0,1176,1186,1,0,0,0,1177,1179,5,161,0,0,1178,1180,
5,138,0,0,1179,1178,1,0,0,0,1179,1180,1,0,0,0,1180,1186,1,0,0,0,1181,1183,
5,75,0,0,1182,1184,5,138,0,0,1183,1182,1,0,0,0,1183,1184,1,0,0,0,1184,1186,
1,0,0,0,1185,1171,1,0,0,0,1185,1173,1,0,0,0,1185,1177,1,0,0,0,1185,1181,
1,0,0,0,1186,71,1,0,0,0,1187,1188,5,132,0,0,1188,1202,3,86,43,0,1189,1190,
5,208,0,0,1190,1191,5,2,0,0,1191,1196,3,152,76,0,1192,1193,5,4,0,0,1193,
1195,3,152,76,0,1194,1192,1,0,0,0,1195,1198,1,0,0,0,1196,1194,1,0,0,0,1196,
1197,1,0,0,0,1197,1199,1,0,0,0,1198,1196,1,0,0,0,1199,1200,5,3,0,0,1200,
1202,1,0,0,0,1201,1187,1,0,0,0,1201,1189,1,0,0,0,1202,73,1,0,0,0,1203,1210,
3,78,39,0,1204,1205,5,188,0,0,1205,1206,3,76,38,0,1206,1207,5,2,0,0,1207,
1208,3,84,42,0,1208,1209,5,3,0,0,1209,1211,1,0,0,0,1210,1204,1,0,0,0,1210,
1211,1,0,0,0,1211,75,1,0,0,0,1212,1213,7,10,0,0,1213,77,1,0,0,0,1214,1222,
3,82,41,0,1215,1217,5,18,0,0,1216,1215,1,0,0,0,1216,1217,1,0,0,0,1217,1218,
1,0,0,0,1218,1220,3,152,76,0,1219,1221,3,80,40,0,1220,1219,1,0,0,0,1220,
1221,1,0,0,0,1221,1223,1,0,0,0,1222,1216,1,0,0,0,1222,1223,1,0,0,0,1223,
79,1,0,0,0,1224,1225,5,2,0,0,1225,1230,3,152,76,0,1226,1227,5,4,0,0,1227,
1229,3,152,76,0,1228,1226,1,0,0,0,1229,1232,1,0,0,0,1230,1228,1,0,0,0,1230,
1231,1,0,0,0,1231,1233,1,0,0,0,1232,1230,1,0,0,0,1233,1234,5,3,0,0,1234,
81,1,0,0,0,1235,1237,3,142,71,0,1236,1238,3,144,72,0,1237,1236,1,0,0,0,1237,
1238,1,0,0,0,1238,1268,1,0,0,0,1239,1240,5,2,0,0,1240,1241,3,8,4,0,1241,
1242,5,3,0,0,1242,1268,1,0,0,0,1243,1244,5,204,0,0,1244,1245,5,2,0,0,1245,
1250,3,84,42,0,1246,1247,5,4,0,0,1247,1249,3,84,42,0,1248,1246,1,0,0,0,1249,
1252,1,0,0,0,1250,1248,1,0,0,0,1250,1251,1,0,0,0,1251,1253,1,0,0,0,1252,
1250,1,0,0,0,1253,1256,5,3,0,0,1254,1255,5,216,0,0,1255,1257,5,137,0,0,1256,
1254,1,0,0,0,1256,1257,1,0,0,0,1257,1268,1,0,0,0,1258,1259,5,105,0,0,1259,
1260,5,2,0,0,1260,1261,3,8,4,0,1261,1262,5,3,0,0,1262,1268,1,0,0,0,1263,
1264,5,2,0,0,1264,1265,3,68,34,0,1265,1266,5,3,0,0,1266,1268,1,0,0,0,1267,
1235,1,0,0,0,1267,1239,1,0,0,0,1267,1243,1,0,0,0,1267,1258,1,0,0,0,1267,
1263,1,0,0,0,1268,83,1,0,0,0,1269,1270,3,86,43,0,1270,85,1,0,0,0,1271,1272,
6,43,-1,0,1272,1274,3,90,45,0,1273,1275,3,88,44,0,1274,1273,1,0,0,0,1274,
1275,1,0,0,0,1275,1279,1,0,0,0,1276,1277,5,126,0,0,1277,1279,3,86,43,3,1278,
1271,1,0,0,0,1278,1276,1,0,0,0,1279,1288,1,0,0,0,1280,1281,10,2,0,0,1281,
1282,5,15,0,0,1282,1287,3,86,43,3,1283,1284,10,1,0,0,1284,1285,5,135,0,0,
1285,1287,3,86,43,2,1286,1280,1,0,0,0,1286,1283,1,0,0,0,1287,1290,1,0,0,
0,1288,1286,1,0,0,0,1288,1289,1,0,0,0,1289,87,1,0,0,0,1290,1288,1,0,0,0,
1291,1292,3,100,50,0,1292,1293,3,90,45,0,1293,1353,1,0,0,0,1294,1295,3,100,
50,0,1295,1296,3,102,51,0,1296,1297,5,2,0,0,1297,1298,3,8,4,0,1298,1299,
5,3,0,0,1299,1353,1,0,0,0,1300,1302,5,126,0,0,1301,1300,1,0,0,0,1301,1302,
1,0,0,0,1302,1303,1,0,0,0,1303,1304,5,22,0,0,1304,1305,3,90,45,0,1305,1306,
5,15,0,0,1306,1307,3,90,45,0,1307,1353,1,0,0,0,1308,1310,5,126,0,0,1309,
1308,1,0,0,0,1309,1310,1,0,0,0,1310,1311,1,0,0,0,1311,1312,5,89,0,0,1312,
1313,5,2,0,0,1313,1318,3,84,42,0,1314,1315,5,4,0,0,1315,1317,3,84,42,0,1316,
1314,1,0,0,0,1317,1320,1,0,0,0,1318,1316,1,0,0,0,1318,1319,1,0,0,0,1319,
1321,1,0,0,0,1320,1318,1,0,0,0,1321,1322,5,3,0,0,1322,1353,1,0,0,0,1323,
1325,5,126,0,0,1324,1323,1,0,0,0,1324,1325,1,0,0,0,1325,1326,1,0,0,0,1326,
1327,5,89,0,0,1327,1328,5,2,0,0,1328,1329,3,8,4,0,1329,1330,5,3,0,0,1330,
1353,1,0,0,0,1331,1333,5,126,0,0,1332,1331,1,0,0,0,1332,1333,1,0,0,0,1333,
1334,1,0,0,0,1334,1335,5,108,0,0,1335,1338,3,90,45,0,1336,1337,5,59,0,0,
1337,1339,3,90,45,0,1338,1336,1,0,0,0,1338,1339,1,0,0,0,1339,1353,1,0,0,
0,1340,1342,5,99,0,0,1341,1343,5,126,0,0,1342,1341,1,0,0,0,1342,1343,1,0,
0,0,1343,1344,1,0,0,0,1344,1353,5,127,0,0,1345,1347,5,99,0,0,1346,1348,5,
126,0,0,1347,1346,1,0,0,0,1347,1348,1,0,0,0,1348,1349,1,0,0,0,1349,1350,
5,54,0,0,1350,1351,5,74,0,0,1351,1353,3,90,45,0,1352,1291,1,0,0,0,1352,1294,
1,0,0,0,1352,1301,1,0,0,0,1352,1309,1,0,0,0,1352,1324,1,0,0,0,1352,1332,
1,0,0,0,1352,1340,1,0,0,0,1352,1345,1,0,0,0,1353,89,1,0,0,0,1354,1355,6,
45,-1,0,1355,1359,3,92,46,0,1356,1357,7,11,0,0,1357,1359,3,90,45,4,1358,
1354,1,0,0,0,1358,1356,1,0,0,0,1359,1374,1,0,0,0,1360,1361,10,3,0,0,1361,
1362,7,12,0,0,1362,1373,3,90,45,4,1363,1364,10,2,0,0,1364,1365,7,11,0,0,
1365,1373,3,90,45,3,1366,1367,10,1,0,0,1367,1368,5,232,0,0,1368,1373,3,90,
45,2,1369,1370,10,5,0,0,1370,1371,5,20,0,0,1371,1373,3,98,49,0,1372,1360,
1,0,0,0,1372,1363,1,0,0,0,1372,1366,1,0,0,0,1372,1369,1,0,0,0,1373,1376,
1,0,0,0,1374,1372,1,0,0,0,1374,1375,1,0,0,0,1375,91,1,0,0,0,1376,1374,1,
0,0,0,1377,1378,6,46,-1,0,1378,1617,5,127,0,0,1379,1617,3,106,53,0,1380,
1381,3,152,76,0,1381,1382,3,94,47,0,1382,1617,1,0,0,0,1383,1384,5,245,0,
0,1384,1617,3,94,47,0,1385,1617,3,154,77,0,1386,1617,3,104,52,0,1387,1617,
3,94,47,0,1388,1617,5,235,0,0,1389,1617,5,5,0,0,1390,1391,5,143,0,0,1391,
1392,5,2,0,0,1392,1393,3,90,45,0,1393,1394,5,89,0,0,1394,1395,3,90,45,0,
1395,1396,5,3,0,0,1396,1617,1,0,0,0,1397,1398,5,2,0,0,1398,1401,3,84,42,
0,1399,1400,5,4,0,0,1400,1402,3,84,42,0,1401,1399,1,0,0,0,1402,1403,1,0,
0,0,1403,1401,1,0,0,0,1403,1404,1,0,0,0,1404,1405,1,0,0,0,1405,1406,5,3,
0,0,1406,1617,1,0,0,0,1407,1408,5,166,0,0,1408,1409,5,2,0,0,1409,1414,3,
84,42,0,1410,1411,5,4,0,0,1411,1413,3,84,42,0,1412,1410,1,0,0,0,1413,1416,
1,0,0,0,1414,1412,1,0,0,0,1414,1415,1,0,0,0,1415,1417,1,0,0,0,1416,1414,
1,0,0,0,1417,1418,5,3,0,0,1418,1617,1,0,0,0,1419,1420,3,142,71,0,1420,1421,
5,2,0,0,1421,1422,5,229,0,0,1422,1424,5,3,0,0,1423,1425,3,122,61,0,1424,
1423,1,0,0,0,1424,1425,1,0,0,0,1425,1427,1,0,0,0,1426,1428,3,124,62,0,1427,
1426,1,0,0,0,1427,1428,1,0,0,0,1428,1617,1,0,0,0,1429,1430,3,142,71,0,1430,
1442,5,2,0,0,1431,1433,3,64,32,0,1432,1431,1,0,0,0,1432,1433,1,0,0,0,1433,
1434,1,0,0,0,1434,1439,3,84,42,0,1435,1436,5,4,0,0,1436,1438,3,84,42,0,1437,
1435,1,0,0,0,1438,1441,1,0,0,0,1439,1437,1,0,0,0,1439,1440,1,0,0,0,1440,
1443,1,0,0,0,1441,1439,1,0,0,0,1442,1432,1,0,0,0,1442,1443,1,0,0,0,1443,
1454,1,0,0,0,1444,1445,5,136,0,0,1445,1446,5,23,0,0,1446,1451,3,52,26,0,
1447,1448,5,4,0,0,1448,1450,3,52,26,0,1449,1447,1,0,0,0,1450,1453,1,0,0,
0,1451,1449,1,0,0,0,1451,1452,1,0,0,0,1452,1455,1,0,0,0,1453,1451,1,0,0,
0,1454,1444,1,0,0,0,1454,1455,1,0,0,0,1455,1456,1,0,0,0,1456,1458,5,3,0,
0,1457,1459,3,122,61,0,1458,1457,1,0,0,0,1458,1459,1,0,0,0,1459,1464,1,0,
0,0,1460,1462,3,96,48,0,1461,1460,1,0,0,0,1461,1462,1,0,0,0,1462,1463,1,
0,0,0,1463,1465,3,124,62,0,1464,1461,1,0,0,0,1464,1465,1,0,0,0,1465,1617,
1,0,0,0,1466,1467,3,152,76,0,1467,1468,5,6,0,0,1468,1469,3,84,42,0,1469,
1617,1,0,0,0,1470,1479,5,2,0,0,1471,1476,3,152,76,0,1472,1473,5,4,0,0,1473,
1475,3,152,76,0,1474,1472,1,0,0,0,1475,1478,1,0,0,0,1476,1474,1,0,0,0,1476,
1477,1,0,0,0,1477,1480,1,0,0,0,1478,1476,1,0,0,0,1479,1471,1,0,0,0,1479,
1480,1,0,0,0,1480,1481,1,0,0,0,1481,1482,5,3,0,0,1482,1483,5,6,0,0,1483,
1617,3,84,42,0,1484,1485,5,2,0,0,1485,1486,3,8,4,0,1486,1487,5,3,0,0,1487,
1617,1,0,0,0,1488,1489,5,63,0,0,1489,1490,5,2,0,0,1490,1491,3,8,4,0,1491,
1492,5,3,0,0,1492,1617,1,0,0,0,1493,1494,5,27,0,0,1494,1496,3,90,45,0,1495,
1497,3,120,60,0,1496,1495,1,0,0,0,1497,1498,1,0,0,0,1498,1496,1,0,0,0,1498,
1499,1,0,0,0,1499,1502,1,0,0,0,1500,1501,5,57,0,0,1501,1503,3,84,42,0,1502,
1500,1,0,0,0,1502,1503,1,0,0,0,1503,1504,1,0,0,0,1504,1505,5,58,0,0,1505,
1617,1,0,0,0,1506,1508,5,27,0,0,1507,1509,3,120,60,0,1508,1507,1,0,0,0,1509,
1510,1,0,0,0,1510,1508,1,0,0,0,1510,1511,1,0,0,0,1511,1514,1,0,0,0,1512,
1513,5,57,0,0,1513,1515,3,84,42,0,1514,1512,1,0,0,0,1514,1515,1,0,0,0,1515,
1516,1,0,0,0,1516,1517,5,58,0,0,1517,1617,1,0,0,0,1518,1519,5,28,0,0,1519,
1520,5,2,0,0,1520,1521,3,84,42,0,1521,1522,5,18,0,0,1522,1523,3,114,57,0,
1523,1524,5,3,0,0,1524,1617,1,0,0,0,1525,1526,5,198,0,0,1526,1527,5,2,0,
0,1527,1528,3,84,42,0,1528,1529,5,18,0,0,1529,1530,3,114,57,0,1530,1531,
5,3,0,0,1531,1617,1,0,0,0,1532,1533,5,17,0,0,1533,1542,5,7,0,0,1534,1539,
3,84,42,0,1535,1536,5,4,0,0,1536,1538,3,84,42,0,1537,1535,1,0,0,0,1538,1541,
1,0,0,0,1539,1537,1,0,0,0,1539,1540,1,0,0,0,1540,1543,1,0,0,0,1541,1539,
1,0,0,0,1542,1534,1,0,0,0,1542,1543,1,0,0,0,1543,1544,1,0,0,0,1544,1617,
5,8,0,0,1545,1617,3,152,76,0,1546,1617,5,40,0,0,1547,1551,5,42,0,0,1548,
1549,5,2,0,0,1549,1550,5,236,0,0,1550,1552,5,3,0,0,1551,1548,1,0,0,0,1551,
1552,1,0,0,0,1552,1617,1,0,0,0,1553,1557,5,43,0,0,1554,1555,5,2,0,0,1555,
1556,5,236,0,0,1556,1558,5,3,0,0,1557,1554,1,0,0,0,1557,1558,1,0,0,0,1558,
1617,1,0,0,0,1559,1563,5,110,0,0,1560,1561,5,2,0,0,1561,1562,5,236,0,0,1562,
1564,5,3,0,0,1563,1560,1,0,0,0,1563,1564,1,0,0,0,1564,1617,1,0,0,0,1565,
1569,5,111,0,0,1566,1567,5,2,0,0,1567,1568,5,236,0,0,1568,1570,5,3,0,0,1569,
1566,1,0,0,0,1569,1570,1,0,0,0,1570,1617,1,0,0,0,1571,1617,5,44,0,0,1572,
1573,5,182,0,0,1573,1574,5,2,0,0,1574,1575,3,90,45,0,1575,1576,5,74,0,0,
1576,1579,3,90,45,0,1577,1578,5,72,0,0,1578,1580,3,90,45,0,1579,1577,1,0,
0,0,1579,1580,1,0,0,0,1580,1581,1,0,0,0,1581,1582,5,3,0,0,1582,1617,1,0,
0,0,1583,1584,5,125,0,0,1584,1585,5,2,0,0,1585,1588,3,90,45,0,1586,1587,
5,4,0,0,1587,1589,3,110,55,0,1588,1586,1,0,0,0,1588,1589,1,0,0,0,1589,1590,
1,0,0,0,1590,1591,5,3,0,0,1591,1617,1,0,0,0,1592,1593,5,65,0,0,1593,1594,
5,2,0,0,1594,1595,3,152,76,0,1595,1596,5,74,0,0,1596,1597,3,90,45,0,1597,
1598,5,3,0,0,1598,1617,1,0,0,0,1599,1600,5,2,0,0,1600,1601,3,84,42,0,1601,
1602,5,3,0,0,1602,1617,1,0,0,0,1603,1604,5,83,0,0,1604,1613,5,2,0,0,1605,
1610,3,142,71,0,1606,1607,5,4,0,0,1607,1609,3,142,71,0,1608,1606,1,0,0,0,
1609,1612,1,0,0,0,1610,1608,1,0,0,0,1610,1611,1,0,0,0,1611,1614,1,0,0,0,
1612,1610,1,0,0,0,1613,1605,1,0,0,0,1613,1614,1,0,0,0,1614,1615,1,0,0,0,
1615,1617,5,3,0,0,1616,1377,1,0,0,0,1616,1379,1,0,0,0,1616,1380,1,0,0,0,
1616,1383,1,0,0,0,1616,1385,1,0,0,0,1616,1386,1,0,0,0,1616,1387,1,0,0,0,
1616,1388,1,0,0,0,1616,1389,1,0,0,0,1616,1390,1,0,0,0,1616,1397,1,0,0,0,
1616,1407,1,0,0,0,1616,1419,1,0,0,0,1616,1429,1,0,0,0,1616,1466,1,0,0,0,
1616,1470,1,0,0,0,1616,1484,1,0,0,0,1616,1488,1,0,0,0,1616,1493,1,0,0,0,
1616,1506,1,0,0,0,1616,1518,1,0,0,0,1616,1525,1,0,0,0,1616,1532,1,0,0,0,
1616,1545,1,0,0,0,1616,1546,1,0,0,0,1616,1547,1,0,0,0,1616,1553,1,0,0,0,
1616,1559,1,0,0,0,1616,1565,1,0,0,0,1616,1571,1,0,0,0,1616,1572,1,0,0,0,
1616,1583,1,0,0,0,1616,1592,1,0,0,0,1616,1599,1,0,0,0,1616,1603,1,0,0,0,
1617,1628,1,0,0,0,1618,1619,10,14,0,0,1619,1620,5,7,0,0,1620,1621,3,90,45,
0,1621,1622,5,8,0,0,1622,1627,1,0,0,0,1623,1624,10,12,0,0,1624,1625,5,1,
0,0,1625,1627,3,152,76,0,1626,1618,1,0,0,0,1626,1623,1,0,0,0,1627,1630,1,
0,0,0,1628,1626,1,0,0,0,1628,1629,1,0,0,0,1629,93,1,0,0,0,1630,1628,1,0,
0,0,1631,1638,5,233,0,0,1632,1635,5,234,0,0,1633,1634,5,200,0,0,1634,1636,
5,233,0,0,1635,1633,1,0,0,0,1635,1636,1,0,0,0,1636,1638,1,0,0,0,1637,1631,
1,0,0,0,1637,1632,1,0,0,0,1638,95,1,0,0,0,1639,1640,5,88,0,0,1640,1644,5,
129,0,0,1641,1642,5,156,0,0,1642,1644,5,129,0,0,1643,1639,1,0,0,0,1643,1641,
1,0,0,0,1644,97,1,0,0,0,1645,1646,5,192,0,0,1646,1647,5,220,0,0,1647,1652,
3,106,53,0,1648,1649,5,192,0,0,1649,1650,5,220,0,0,1650,1652,3,94,47,0,1651,
1645,1,0,0,0,1651,1648,1,0,0,0,1652,99,1,0,0,0,1653,1654,7,13,0,0,1654,101,
1,0,0,0,1655,1656,7,14,0,0,1656,103,1,0,0,0,1657,1658,7,15,0,0,1658,105,
1,0,0,0,1659,1661,5,95,0,0,1660,1662,7,11,0,0,1661,1660,1,0,0,0,1661,1662,
1,0,0,0,1662,1663,1,0,0,0,1663,1664,3,94,47,0,1664,1667,3,108,54,0,1665,
1666,5,194,0,0,1666,1668,3,108,54,0,1667,1665,1,0,0,0,1667,1668,1,0,0,0,
1668,107,1,0,0,0,1669,1670,7,16,0,0,1670,109,1,0,0,0,1671,1672,7,17,0,0,
1672,111,1,0,0,0,1673,1682,5,2,0,0,1674,1679,3,114,57,0,1675,1676,5,4,0,
0,1676,1678,3,114,57,0,1677,1675,1,0,0,0,1678,1681,1,0,0,0,1679,1677,1,0,
0,0,1679,1680,1,0,0,0,1680,1683,1,0,0,0,1681,1679,1,0,0,0,1682,1674,1,0,
0,0,1682,1683,1,0,0,0,1683,1684,1,0,0,0,1684,1685,5,3,0,0,1685,113,1,0,0,
0,1686,1687,6,57,-1,0,1687,1688,5,17,0,0,1688,1689,5,223,0,0,1689,1690,3,
114,57,0,1690,1691,5,225,0,0,1691,1734,1,0,0,0,1692,1693,5,113,0,0,1693,
1694,5,223,0,0,1694,1695,3,114,57,0,1695,1696,5,4,0,0,1696,1697,3,114,57,
0,1697,1698,5,225,0,0,1698,1734,1,0,0,0,1699,1700,5,166,0,0,1700,1701,5,
2,0,0,1701,1702,3,152,76,0,1702,1709,3,114,57,0,1703,1704,5,4,0,0,1704,1705,
3,152,76,0,1705,1706,3,114,57,0,1706,1708,1,0,0,0,1707,1703,1,0,0,0,1708,
1711,1,0,0,0,1709,1707,1,0,0,0,1709,1710,1,0,0,0,1710,1712,1,0,0,0,1711,
1709,1,0,0,0,1712,1713,5,3,0,0,1713,1734,1,0,0,0,1714,1726,3,118,59,0,1715,
1716,5,2,0,0,1716,1721,3,116,58,0,1717,1718,5,4,0,0,1718,1720,3,116,58,0,
1719,1717,1,0,0,0,1720,1723,1,0,0,0,1721,1719,1,0,0,0,1721,1722,1,0,0,0,
1722,1724,1,0,0,0,1723,1721,1,0,0,0,1724,1725,5,3,0,0,1725,1727,1,0,0,0,
1726,1715,1,0,0,0,1726,1727,1,0,0,0,1727,1734,1,0,0,0,1728,1729,5,95,0,0,
1729,1730,3,108,54,0,1730,1731,5,194,0,0,1731,1732,3,108,54,0,1732,1734,
1,0,0,0,1733,1686,1,0,0,0,1733,1692,1,0,0,0,1733,1699,1,0,0,0,1733,1714,
1,0,0,0,1733,1728,1,0,0,0,1734,1739,1,0,0,0,1735,1736,10,6,0,0,1736,1738,
5,17,0,0,1737,1735,1,0,0,0,1738,1741,1,0,0,0,1739,1737,1,0,0,0,1739,1740,
1,0,0,0,1740,115,1,0,0,0,1741,1739,1,0,0,0,1742,1745,5,236,0,0,1743,1745,
3,114,57,0,1744,1742,1,0,0,0,1744,1743,1,0,0,0,1745,117,1,0,0,0,1746,1751,
5,243,0,0,1747,1751,5,244,0,0,1748,1751,5,245,0,0,1749,1751,3,142,71,0,1750,
1746,1,0,0,0,1750,1747,1,0,0,0,1750,1748,1,0,0,0,1750,1749,1,0,0,0,1751,
119,1,0,0,0,1752,1753,5,214,0,0,1753,1754,3,84,42,0,1754,1755,5,191,0,0,
1755,1756,3,84,42,0,1756,121,1,0,0,0,1757,1758,5,69,0,0,1758,1759,5,2,0,
0,1759,1760,5,215,0,0,1760,1761,3,86,43,0,1761,1762,5,3,0,0,1762,123,1,0,
0,0,1763,1764,5,140,0,0,1764,1775,5,2,0,0,1765,1766,5,141,0,0,1766,1767,
5,23,0,0,1767,1772,3,84,42,0,1768,1769,5,4,0,0,1769,1771,3,84,42,0,1770,
1768,1,0,0,0,1771,1774,1,0,0,0,1772,1770,1,0,0,0,1772,1773,1,0,0,0,1773,
1776,1,0,0,0,1774,1772,1,0,0,0,1775,1765,1,0,0,0,1775,1776,1,0,0,0,1776,
1787,1,0,0,0,1777,1778,5,136,0,0,1778,1779,5,23,0,0,1779,1784,3,52,26,0,
1780,1781,5,4,0,0,1781,1783,3,52,26,0,1782,1780,1,0,0,0,1783,1786,1,0,0,
0,1784,1782,1,0,0,0,1784,1785,1,0,0,0,1785,1788,1,0,0,0,1786,1784,1,0,0,
0,1787,1777,1,0,0,0,1787,1788,1,0,0,0,1788,1790,1,0,0,0,1789,1791,3,126,
63,0,1790,1789,1,0,0,0,1790,1791,1,0,0,0,1791,1792,1,0,0,0,1792,1793,5,3,
0,0,1793,125,1,0,0,0,1794,1795,5,148,0,0,1795,1819,3,128,64,0,1796,1797,
5,167,0,0,1797,1819,3,128,64,0,1798,1799,5,84,0,0,1799,1819,3,128,64,0,1800,
1801,5,148,0,0,1801,1802,5,22,0,0,1802,1803,3,128,64,0,1803,1804,5,15,0,
0,1804,1805,3,128,64,0,1805,1819,1,0,0,0,1806,1807,5,167,0,0,1807,1808,5,
22,0,0,1808,1809,3,128,64,0,1809,1810,5,15,0,0,1810,1811,3,128,64,0,1811,
1819,1,0,0,0,1812,1813,5,84,0,0,1813,1814,5,22,0,0,1814,1815,3,128,64,0,
1815,1816,5,15,0,0,1816,1817,3,128,64,0,1817,1819,1,0,0,0,1818,1794,1,0,
0,0,1818,1796,1,0,0,0,1818,1798,1,0,0,0,1818,1800,1,0,0,0,1818,1806,1,0,
0,0,1818,1812,1,0,0,0,1819,127,1,0,0,0,1820,1821,5,201,0,0,1821,1830,5,144,
0,0,1822,1823,5,201,0,0,1823,1830,5,71,0,0,1824,1825,5,39,0,0,1825,1830,
5,166,0,0,1826,1827,3,84,42,0,1827,1828,7,18,0,0,1828,1830,1,0,0,0,1829,
1820,1,0,0,0,1829,1822,1,0,0,0,1829,1824,1,0,0,0,1829,1826,1,0,0,0,1830,
129,1,0,0,0,1831,1832,3,152,76,0,1832,1833,5,221,0,0,1833,1834,3,84,42,0,
1834,131,1,0,0,0,1835,1836,5,73,0,0,1836,1840,7,19,0,0,1837,1838,5,199,0,
0,1838,1840,7,20,0,0,1839,1835,1,0,0,0,1839,1837,1,0,0,0,1840,133,1,0,0,
0,1841,1842,5,100,0,0,1842,1843,5,107,0,0,1843,1847,3,136,68,0,1844,1845,
5,149,0,0,1845,1847,7,21,0,0,1846,1841,1,0,0,0,1846,1844,1,0,0,0,1847,135,
1,0,0,0,1848,1849,5,149,0,0,1849,1856,5,202,0,0,1850,1851,5,149,0,0,1851,
1856,5,34,0,0,1852,1853,5,153,0,0,1853,1856,5,149,0,0,1854,1856,5,173,0,
0,1855,1848,1,0,0,0,1855,1850,1,0,0,0,1855,1852,1,0,0,0,1855,1854,1,0,0,
0,1856,137,1,0,0,0,1857,1863,3,84,42,0,1858,1859,3,152,76,0,1859,1860,5,
9,0,0,1860,1861,3,84,42,0,1861,1863,1,0,0,0,1862,1857,1,0,0,0,1862,1858,
1,0,0,0,1863,139,1,0,0,0,1864,1869,5,172,0,0,1865,1869,5,50,0,0,1866,1869,
5,93,0,0,1867,1869,3,152,76,0,1868,1864,1,0,0,0,1868,1865,1,0,0,0,1868,1866,
1,0,0,0,1868,1867,1,0,0,0,1869,141,1,0,0,0,1870,1875,3,152,76,0,1871,1872,
5,1,0,0,1872,1874,3,152,76,0,1873,1871,1,0,0,0,1874,1877,1,0,0,0,1875,1873,
1,0,0,0,1875,1876,1,0,0,0,1876,143,1,0,0,0,1877,1875,1,0,0,0,1878,1879,5,
72,0,0,1879,1880,7,22,0,0,1880,1881,5,18,0,0,1881,1882,5,130,0,0,1882,1883,
3,90,45,0,1883,145,1,0,0,0,1884,1888,5,44,0,0,1885,1888,5,41,0,0,1886,1888,
3,148,74,0,1887,1884,1,0,0,0,1887,1885,1,0,0,0,1887,1886,1,0,0,0,1888,147,
1,0,0,0,1889,1890,5,207,0,0,1890,1895,3,152,76,0,1891,1892,5,162,0,0,1892,
1895,3,152,76,0,1893,1895,3,152,76,0,1894,1889,1,0,0,0,1894,1891,1,0,0,0,
1894,1893,1,0,0,0,1895,149,1,0,0,0,1896,1901,3,152,76,0,1897,1898,5,4,0,
0,1898,1900,3,152,76,0,1899,1897,1,0,0,0,1900,1903,1,0,0,0,1901,1899,1,0,
0,0,1901,1902,1,0,0,0,1902,151,1,0,0,0,1903,1901,1,0,0,0,1904,1910,5,239,
0,0,1905,1910,5,241,0,0,1906,1910,3,156,78,0,1907,1910,5,242,0,0,1908,1910,
5,240,0,0,1909,1904,1,0,0,0,1909,1905,1,0,0,0,1909,1906,1,0,0,0,1909,1907,
1,0,0,0,1909,1908,1,0,0,0,1910,153,1,0,0,0,1911,1915,5,237,0,0,1912,1915,
5,238,0,0,1913,1915,5,236,0,0,1914,1911,1,0,0,0,1914,1912,1,0,0,0,1914,1913,
1,0,0,0,1915,155,1,0,0,0,1916,1917,7,23,0,0,1917,157,1,0,0,0,245,180,185,
191,195,209,213,217,221,229,233,236,243,252,258,262,268,275,284,293,304,
311,321,328,336,344,352,364,370,375,381,390,399,404,408,416,423,436,439,
449,452,459,468,474,479,483,493,496,506,519,525,530,536,545,551,558,566,
571,575,583,589,596,601,605,615,618,622,625,633,638,659,665,671,673,679,
685,687,695,697,716,721,728,740,742,750,752,770,773,777,781,799,802,818,
823,825,828,834,841,846,852,856,860,866,874,889,896,901,908,916,920,925,
936,948,951,956,958,967,969,977,983,986,988,1000,1007,1011,1015,1019,1026,
1035,1038,1042,1047,1051,1054,1061,1072,1075,1085,1088,1099,1104,1112,1115,
1119,1123,1134,1137,1144,1163,1167,1171,1175,1179,1183,1185,1196,1201,1210,
1216,1220,1222,1230,1237,1250,1256,1267,1274,1278,1286,1288,1301,1309,1318,
1324,1332,1338,1342,1347,1352,1358,1372,1374,1403,1414,1424,1427,1432,1439,
1442,1451,1454,1458,1461,1464,1476,1479,1498,1502,1510,1514,1539,1542,1551,
1557,1563,1569,1579,1588,1610,1613,1616,1626,1628,1635,1637,1643,1651,1661,
1667,1679,1682,1709,1721,1726,1733,1739,1744,1750,1772,1775,1784,1787,1790,
1818,1829,1839,1846,1855,1862,1868,1875,1887,1894,1901,1909,1914];


const atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN);

const decisionsToDFA = atn.decisionToState.map( (ds, index) => new antlr4.dfa.DFA(ds, index) );

const sharedContextCache = new antlr4.atn.PredictionContextCache();

export default class SqlBaseParser extends antlr4.Parser {

    static grammarFileName = "SqlBase.g4";
    static literalNames = [ null, "'.'", "'('", "')'", "','", "'?'", "'->'", 
                            "'['", "']'", "'=>'", "'ADD'", "'ADMIN'", "'ALL'", 
                            "'ALTER'", "'ANALYZE'", "'AND'", "'ANY'", "'ARRAY'", 
                            "'AS'", "'ASC'", "'AT'", "'BERNOULLI'", "'BETWEEN'", 
                            "'BY'", "'CALL'", "'CALLED'", "'CASCADE'", "'CASE'", 
                            "'CAST'", "'CATALOGS'", "'COLUMN'", "'COLUMNS'", 
                            "'COMMENT'", "'COMMIT'", "'COMMITTED'", "'CONSTRAINT'", 
                            "'CREATE'", "'CROSS'", "'CUBE'", "'CURRENT'", 
                            "'CURRENT_DATE'", "'CURRENT_ROLE'", "'CURRENT_TIME'", 
                            "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", "'DATA'", 
                            "'DATE'", "'DAY'", "'DEALLOCATE'", "'DEFINER'", 
                            "'DELETE'", "'DESC'", "'DESCRIBE'", "'DETERMINISTIC'", 
                            "'DISTINCT'", "'DISTRIBUTED'", "'DROP'", "'ELSE'", 
                            "'END'", "'ESCAPE'", "'EXCEPT'", "'EXCLUDING'", 
                            "'EXECUTE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", 
                            "'EXTERNAL'", "'FALSE'", "'FETCH'", "'FILTER'", 
                            "'FIRST'", "'FOLLOWING'", "'FOR'", "'FORMAT'", 
                            "'FROM'", "'FULL'", "'FUNCTION'", "'FUNCTIONS'", 
                            "'GRANT'", "'GRANTED'", "'GRANTS'", "'GRAPHVIZ'", 
                            "'GROUP'", "'GROUPING'", "'GROUPS'", "'HAVING'", 
                            "'HOUR'", "'IF'", "'IGNORE'", "'IN'", "'INCLUDING'", 
                            "'INNER'", "'INPUT'", "'INSERT'", "'INTERSECT'", 
                            "'INTERVAL'", "'INTO'", "'INVOKER'", "'IO'", 
                            "'IS'", "'ISOLATION'", "'JSON'", "'JOIN'", "'LANGUAGE'", 
                            "'LAST'", "'LATERAL'", "'LEFT'", "'LEVEL'", 
                            "'LIKE'", "'LIMIT'", "'LOCALTIME'", "'LOCALTIMESTAMP'", 
                            "'LOGICAL'", "'MAP'", "'MATERIALIZED'", "'MINUTE'", 
                            "'MONTH'", "'NAME'", "'NATURAL'", "'NFC'", "'NFD'", 
                            "'NFKC'", "'NFKD'", "'NO'", "'NONE'", "'NORMALIZE'", 
                            "'NOT'", "'NULL'", "'NULLIF'", "'NULLS'", "'OF'", 
                            "'OFFSET'", "'ON'", "'ONLY'", "'OPTION'", "'OR'", 
                            "'ORDER'", "'ORDINALITY'", "'OUTER'", "'OUTPUT'", 
                            "'OVER'", "'PARTITION'", "'PARTITIONS'", "'POSITION'", 
                            "'PRECEDING'", "'PREPARE'", "'PRIVILEGES'", 
                            "'PROPERTIES'", "'RANGE'", "'READ'", "'RECURSIVE'", 
                            "'REFRESH'", "'RENAME'", "'REPEATABLE'", "'REPLACE'", 
                            "'RESET'", "'RESPECT'", "'RESTRICT'", "'RETURN'", 
                            "'RETURNS'", "'REVOKE'", "'RIGHT'", "'ROLE'", 
                            "'ROLES'", "'ROLLBACK'", "'ROLLUP'", "'ROW'", 
                            "'ROWS'", "'SCHEMA'", "'SCHEMAS'", "'SECOND'", 
                            "'SECURITY'", "'SELECT'", "'SERIALIZABLE'", 
                            "'SESSION'", "'SET'", "'SETS'", "'SHOW'", "'SOME'", 
                            "'SQL'", "'START'", "'STATS'", "'SUBSTRING'", 
                            "'SYSTEM'", "'SYSTEM_TIME'", "'SYSTEM_VERSION'", 
                            "'TABLE'", "'TABLES'", "'TABLESAMPLE'", "'TEMPORARY'", 
                            "'TEXT'", "'THEN'", "'TIME'", "'TIMESTAMP'", 
                            "'TO'", "'TRANSACTION'", "'TRUE'", "'TRUNCATE'", 
                            "'TRY_CAST'", "'TYPE'", "'UESCAPE'", "'UNBOUNDED'", 
                            "'UNCOMMITTED'", "'UNION'", "'UNNEST'", "'UPDATE'", 
                            "'USE'", "'USER'", "'USING'", "'VALIDATE'", 
                            "'VALUES'", "'VERBOSE'", "'VERSION'", "'VIEW'", 
                            "'WHEN'", "'WHERE'", "'WITH'", "'WORK'", "'WRITE'", 
                            "'YEAR'", "'ZONE'", "'='", null, "'<'", "'<='", 
                            "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", 
                            "'||'" ];
    static symbolicNames = [ null, null, null, null, null, null, null, null, 
                             null, null, "ADD", "ADMIN", "ALL", "ALTER", 
                             "ANALYZE", "AND", "ANY", "ARRAY", "AS", "ASC", 
                             "AT", "BERNOULLI", "BETWEEN", "BY", "CALL", 
                             "CALLED", "CASCADE", "CASE", "CAST", "CATALOGS", 
                             "COLUMN", "COLUMNS", "COMMENT", "COMMIT", "COMMITTED", 
                             "CONSTRAINT", "CREATE", "CROSS", "CUBE", "CURRENT", 
                             "CURRENT_DATE", "CURRENT_ROLE", "CURRENT_TIME", 
                             "CURRENT_TIMESTAMP", "CURRENT_USER", "DATA", 
                             "DATE", "DAY", "DEALLOCATE", "DEFINER", "DELETE", 
                             "DESC", "DESCRIBE", "DETERMINISTIC", "DISTINCT", 
                             "DISTRIBUTED", "DROP", "ELSE", "END", "ESCAPE", 
                             "EXCEPT", "EXCLUDING", "EXECUTE", "EXISTS", 
                             "EXPLAIN", "EXTRACT", "EXTERNAL", "FALSE", 
                             "FETCH", "FILTER", "FIRST", "FOLLOWING", "FOR", 
                             "FORMAT", "FROM", "FULL", "FUNCTION", "FUNCTIONS", 
                             "GRANT", "GRANTED", "GRANTS", "GRAPHVIZ", "GROUP", 
                             "GROUPING", "GROUPS", "HAVING", "HOUR", "IF", 
                             "IGNORE", "IN", "INCLUDING", "INNER", "INPUT", 
                             "INSERT", "INTERSECT", "INTERVAL", "INTO", 
                             "INVOKER", "IO", "IS", "ISOLATION", "JSON", 
                             "JOIN", "LANGUAGE", "LAST", "LATERAL", "LEFT", 
                             "LEVEL", "LIKE", "LIMIT", "LOCALTIME", "LOCALTIMESTAMP", 
                             "LOGICAL", "MAP", "MATERIALIZED", "MINUTE", 
                             "MONTH", "NAME", "NATURAL", "NFC", "NFD", "NFKC", 
                             "NFKD", "NO", "NONE", "NORMALIZE", "NOT", "NULL", 
                             "NULLIF", "NULLS", "OF", "OFFSET", "ON", "ONLY", 
                             "OPTION", "OR", "ORDER", "ORDINALITY", "OUTER", 
                             "OUTPUT", "OVER", "PARTITION", "PARTITIONS", 
                             "POSITION", "PRECEDING", "PREPARE", "PRIVILEGES", 
                             "PROPERTIES", "RANGE", "READ", "RECURSIVE", 
                             "REFRESH", "RENAME", "REPEATABLE", "REPLACE", 
                             "RESET", "RESPECT", "RESTRICT", "RETURN", "RETURNS", 
                             "REVOKE", "RIGHT", "ROLE", "ROLES", "ROLLBACK", 
                             "ROLLUP", "ROW", "ROWS", "SCHEMA", "SCHEMAS", 
                             "SECOND", "SECURITY", "SELECT", "SERIALIZABLE", 
                             "SESSION", "SET", "SETS", "SHOW", "SOME", "SQL", 
                             "START", "STATS", "SUBSTRING", "SYSTEM", "SYSTEM_TIME", 
                             "SYSTEM_VERSION", "TABLE", "TABLES", "TABLESAMPLE", 
                             "TEMPORARY", "TEXT", "THEN", "TIME", "TIMESTAMP", 
                             "TO", "TRANSACTION", "TRUE", "TRUNCATE", "TRY_CAST", 
                             "TYPE", "UESCAPE", "UNBOUNDED", "UNCOMMITTED", 
                             "UNION", "UNNEST", "UPDATE", "USE", "USER", 
                             "USING", "VALIDATE", "VALUES", "VERBOSE", "VERSION", 
                             "VIEW", "WHEN", "WHERE", "WITH", "WORK", "WRITE", 
                             "YEAR", "ZONE", "EQ", "NEQ", "LT", "LTE", "GT", 
                             "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", 
                             "PERCENT", "CONCAT", "STRING", "UNICODE_STRING", 
                             "BINARY_LITERAL", "INTEGER_VALUE", "DECIMAL_VALUE", 
                             "DOUBLE_VALUE", "IDENTIFIER", "DIGIT_IDENTIFIER", 
                             "QUOTED_IDENTIFIER", "BACKQUOTED_IDENTIFIER", 
                             "TIME_WITH_TIME_ZONE", "TIMESTAMP_WITH_TIME_ZONE", 
                             "DOUBLE_PRECISION", "SIMPLE_COMMENT", "BRACKETED_COMMENT", 
                             "WS", "UNRECOGNIZED", "DELIMITER" ];
    static ruleNames = [ "singleStatement", "standaloneExpression", "standaloneRoutineBody", 
                         "statement", "query", "with", "tableElement", "columnDefinition", 
                         "likeClause", "properties", "property", "sqlParameterDeclaration", 
                         "routineCharacteristics", "routineCharacteristic", 
                         "alterRoutineCharacteristics", "alterRoutineCharacteristic", 
                         "routineBody", "returnStatement", "externalBodyReference", 
                         "language", "determinism", "nullCallClause", "externalRoutineName", 
                         "queryNoWith", "queryTerm", "queryPrimary", "sortItem", 
                         "querySpecification", "groupBy", "groupingElement", 
                         "groupingSet", "namedQuery", "setQuantifier", "selectItem", 
                         "relation", "joinType", "joinCriteria", "sampledRelation", 
                         "sampleType", "aliasedRelation", "columnAliases", 
                         "relationPrimary", "expression", "booleanExpression", 
                         "predicate", "valueExpression", "primaryExpression", 
                         "string", "nullTreatment", "timeZoneSpecifier", 
                         "comparisonOperator", "comparisonQuantifier", "booleanValue", 
                         "interval", "intervalField", "normalForm", "types", 
                         "type", "typeParameter", "baseType", "whenClause", 
                         "filter", "over", "windowFrame", "frameBound", 
                         "updateAssignment", "explainOption", "transactionMode", 
                         "levelOfIsolation", "callArgument", "privilege", 
                         "qualifiedName", "tableVersionExpression", "grantor", 
                         "principal", "roles", "identifier", "number", "nonReserved" ];

    constructor(input) {
        super(input);
        this._interp = new antlr4.atn.ParserATNSimulator(this, atn, decisionsToDFA, sharedContextCache);
        this.ruleNames = SqlBaseParser.ruleNames;
        this.literalNames = SqlBaseParser.literalNames;
        this.symbolicNames = SqlBaseParser.symbolicNames;
    }

    sempred(localctx, ruleIndex, predIndex) {
    	switch(ruleIndex) {
    	case 24:
    	    		return this.queryTerm_sempred(localctx, predIndex);
    	case 34:
    	    		return this.relation_sempred(localctx, predIndex);
    	case 43:
    	    		return this.booleanExpression_sempred(localctx, predIndex);
    	case 45:
    	    		return this.valueExpression_sempred(localctx, predIndex);
    	case 46:
    	    		return this.primaryExpression_sempred(localctx, predIndex);
    	case 57:
    	    		return this.type_sempred(localctx, predIndex);
        default:
            throw "No predicate with index:" + ruleIndex;
       }
    }

    queryTerm_sempred(localctx, predIndex) {
    	switch(predIndex) {
    		case 0:
    			return this.precpred(this._ctx, 2);
    		case 1:
    			return this.precpred(this._ctx, 1);
    		default:
    			throw "No predicate with index:" + predIndex;
    	}
    };

    relation_sempred(localctx, predIndex) {
    	switch(predIndex) {
    		case 2:
    			return this.precpred(this._ctx, 2);
    		default:
    			throw "No predicate with index:" + predIndex;
    	}
    };

    booleanExpression_sempred(localctx, predIndex) {
    	switch(predIndex) {
    		case 3:
    			return this.precpred(this._ctx, 2);
    		case 4:
    			return this.precpred(this._ctx, 1);
    		default:
    			throw "No predicate with index:" + predIndex;
    	}
    };

    valueExpression_sempred(localctx, predIndex) {
    	switch(predIndex) {
    		case 5:
    			return this.precpred(this._ctx, 3);
    		case 6:
    			return this.precpred(this._ctx, 2);
    		case 7:
    			return this.precpred(this._ctx, 1);
    		case 8:
    			return this.precpred(this._ctx, 5);
    		default:
    			throw "No predicate with index:" + predIndex;
    	}
    };

    primaryExpression_sempred(localctx, predIndex) {
    	switch(predIndex) {
    		case 9:
    			return this.precpred(this._ctx, 14);
    		case 10:
    			return this.precpred(this._ctx, 12);
    		default:
    			throw "No predicate with index:" + predIndex;
    	}
    };

    type_sempred(localctx, predIndex) {
    	switch(predIndex) {
    		case 11:
    			return this.precpred(this._ctx, 6);
    		default:
    			throw "No predicate with index:" + predIndex;
    	}
    };




	singleStatement() {
	    let localctx = new SingleStatementContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 0, SqlBaseParser.RULE_singleStatement);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 158;
	        this.statement();
	        this.state = 159;
	        this.match(SqlBaseParser.EOF);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	standaloneExpression() {
	    let localctx = new StandaloneExpressionContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 2, SqlBaseParser.RULE_standaloneExpression);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 161;
	        this.expression();
	        this.state = 162;
	        this.match(SqlBaseParser.EOF);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	standaloneRoutineBody() {
	    let localctx = new StandaloneRoutineBodyContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 4, SqlBaseParser.RULE_standaloneRoutineBody);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 164;
	        this.routineBody();
	        this.state = 165;
	        this.match(SqlBaseParser.EOF);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	statement() {
	    let localctx = new StatementContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 6, SqlBaseParser.RULE_statement);
	    var _la = 0;
	    try {
	        this.state = 825;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,93,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new StatementDefaultContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 167;
	            this.query();
	            break;

	        case 2:
	            localctx = new UseContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 168;
	            this.match(SqlBaseParser.USE);
	            this.state = 169;
	            localctx.schema = this.identifier();
	            break;

	        case 3:
	            localctx = new UseContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 170;
	            this.match(SqlBaseParser.USE);
	            this.state = 171;
	            localctx.catalog = this.identifier();
	            this.state = 172;
	            this.match(SqlBaseParser.T__0);
	            this.state = 173;
	            localctx.schema = this.identifier();
	            break;

	        case 4:
	            localctx = new CreateSchemaContext(this, localctx);
	            this.enterOuterAlt(localctx, 4);
	            this.state = 175;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 176;
	            this.match(SqlBaseParser.SCHEMA);
	            this.state = 180;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,0,this._ctx);
	            if(la_===1) {
	                this.state = 177;
	                this.match(SqlBaseParser.IF);
	                this.state = 178;
	                this.match(SqlBaseParser.NOT);
	                this.state = 179;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 182;
	            this.qualifiedName();
	            this.state = 185;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===216) {
	                this.state = 183;
	                this.match(SqlBaseParser.WITH);
	                this.state = 184;
	                this.properties();
	            }

	            break;

	        case 5:
	            localctx = new DropSchemaContext(this, localctx);
	            this.enterOuterAlt(localctx, 5);
	            this.state = 187;
	            this.match(SqlBaseParser.DROP);
	            this.state = 188;
	            this.match(SqlBaseParser.SCHEMA);
	            this.state = 191;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,2,this._ctx);
	            if(la_===1) {
	                this.state = 189;
	                this.match(SqlBaseParser.IF);
	                this.state = 190;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 193;
	            this.qualifiedName();
	            this.state = 195;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===26 || _la===157) {
	                this.state = 194;
	                _la = this._input.LA(1);
	                if(!(_la===26 || _la===157)) {
	                this._errHandler.recoverInline(this);
	                }
	                else {
	                	this._errHandler.reportMatch(this);
	                    this.consume();
	                }
	            }

	            break;

	        case 6:
	            localctx = new RenameSchemaContext(this, localctx);
	            this.enterOuterAlt(localctx, 6);
	            this.state = 197;
	            this.match(SqlBaseParser.ALTER);
	            this.state = 198;
	            this.match(SqlBaseParser.SCHEMA);
	            this.state = 199;
	            this.qualifiedName();
	            this.state = 200;
	            this.match(SqlBaseParser.RENAME);
	            this.state = 201;
	            this.match(SqlBaseParser.TO);
	            this.state = 202;
	            this.identifier();
	            break;

	        case 7:
	            localctx = new CreateTableAsSelectContext(this, localctx);
	            this.enterOuterAlt(localctx, 7);
	            this.state = 204;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 205;
	            this.match(SqlBaseParser.TABLE);
	            this.state = 209;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,4,this._ctx);
	            if(la_===1) {
	                this.state = 206;
	                this.match(SqlBaseParser.IF);
	                this.state = 207;
	                this.match(SqlBaseParser.NOT);
	                this.state = 208;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 211;
	            this.qualifiedName();
	            this.state = 213;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===2) {
	                this.state = 212;
	                this.columnAliases();
	            }

	            this.state = 217;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===32) {
	                this.state = 215;
	                this.match(SqlBaseParser.COMMENT);
	                this.state = 216;
	                this.string();
	            }

	            this.state = 221;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===216) {
	                this.state = 219;
	                this.match(SqlBaseParser.WITH);
	                this.state = 220;
	                this.properties();
	            }

	            this.state = 223;
	            this.match(SqlBaseParser.AS);
	            this.state = 229;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,8,this._ctx);
	            switch(la_) {
	            case 1:
	                this.state = 224;
	                this.query();
	                break;

	            case 2:
	                this.state = 225;
	                this.match(SqlBaseParser.T__1);
	                this.state = 226;
	                this.query();
	                this.state = 227;
	                this.match(SqlBaseParser.T__2);
	                break;

	            }
	            this.state = 236;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===216) {
	                this.state = 231;
	                this.match(SqlBaseParser.WITH);
	                this.state = 233;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                if(_la===123) {
	                    this.state = 232;
	                    this.match(SqlBaseParser.NO);
	                }

	                this.state = 235;
	                this.match(SqlBaseParser.DATA);
	            }

	            break;

	        case 8:
	            localctx = new CreateTableContext(this, localctx);
	            this.enterOuterAlt(localctx, 8);
	            this.state = 238;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 239;
	            this.match(SqlBaseParser.TABLE);
	            this.state = 243;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,11,this._ctx);
	            if(la_===1) {
	                this.state = 240;
	                this.match(SqlBaseParser.IF);
	                this.state = 241;
	                this.match(SqlBaseParser.NOT);
	                this.state = 242;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 245;
	            this.qualifiedName();
	            this.state = 246;
	            this.match(SqlBaseParser.T__1);
	            this.state = 247;
	            this.tableElement();
	            this.state = 252;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 248;
	                this.match(SqlBaseParser.T__3);
	                this.state = 249;
	                this.tableElement();
	                this.state = 254;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	            this.state = 255;
	            this.match(SqlBaseParser.T__2);
	            this.state = 258;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===32) {
	                this.state = 256;
	                this.match(SqlBaseParser.COMMENT);
	                this.state = 257;
	                this.string();
	            }

	            this.state = 262;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===216) {
	                this.state = 260;
	                this.match(SqlBaseParser.WITH);
	                this.state = 261;
	                this.properties();
	            }

	            break;

	        case 9:
	            localctx = new DropTableContext(this, localctx);
	            this.enterOuterAlt(localctx, 9);
	            this.state = 264;
	            this.match(SqlBaseParser.DROP);
	            this.state = 265;
	            this.match(SqlBaseParser.TABLE);
	            this.state = 268;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,15,this._ctx);
	            if(la_===1) {
	                this.state = 266;
	                this.match(SqlBaseParser.IF);
	                this.state = 267;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 270;
	            this.qualifiedName();
	            break;

	        case 10:
	            localctx = new InsertIntoContext(this, localctx);
	            this.enterOuterAlt(localctx, 10);
	            this.state = 271;
	            this.match(SqlBaseParser.INSERT);
	            this.state = 272;
	            this.match(SqlBaseParser.INTO);
	            this.state = 273;
	            this.qualifiedName();
	            this.state = 275;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,16,this._ctx);
	            if(la_===1) {
	                this.state = 274;
	                this.columnAliases();

	            }
	            this.state = 277;
	            this.query();
	            break;

	        case 11:
	            localctx = new DeleteContext(this, localctx);
	            this.enterOuterAlt(localctx, 11);
	            this.state = 279;
	            this.match(SqlBaseParser.DELETE);
	            this.state = 280;
	            this.match(SqlBaseParser.FROM);
	            this.state = 281;
	            this.qualifiedName();
	            this.state = 284;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===215) {
	                this.state = 282;
	                this.match(SqlBaseParser.WHERE);
	                this.state = 283;
	                this.booleanExpression(0);
	            }

	            break;

	        case 12:
	            localctx = new TruncateTableContext(this, localctx);
	            this.enterOuterAlt(localctx, 12);
	            this.state = 286;
	            this.match(SqlBaseParser.TRUNCATE);
	            this.state = 287;
	            this.match(SqlBaseParser.TABLE);
	            this.state = 288;
	            this.qualifiedName();
	            break;

	        case 13:
	            localctx = new RenameTableContext(this, localctx);
	            this.enterOuterAlt(localctx, 13);
	            this.state = 289;
	            this.match(SqlBaseParser.ALTER);
	            this.state = 290;
	            this.match(SqlBaseParser.TABLE);
	            this.state = 293;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,18,this._ctx);
	            if(la_===1) {
	                this.state = 291;
	                this.match(SqlBaseParser.IF);
	                this.state = 292;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 295;
	            localctx.from = this.qualifiedName();
	            this.state = 296;
	            this.match(SqlBaseParser.RENAME);
	            this.state = 297;
	            this.match(SqlBaseParser.TO);
	            this.state = 298;
	            localctx.to = this.qualifiedName();
	            break;

	        case 14:
	            localctx = new RenameColumnContext(this, localctx);
	            this.enterOuterAlt(localctx, 14);
	            this.state = 300;
	            this.match(SqlBaseParser.ALTER);
	            this.state = 301;
	            this.match(SqlBaseParser.TABLE);
	            this.state = 304;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,19,this._ctx);
	            if(la_===1) {
	                this.state = 302;
	                this.match(SqlBaseParser.IF);
	                this.state = 303;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 306;
	            localctx.tableName = this.qualifiedName();
	            this.state = 307;
	            this.match(SqlBaseParser.RENAME);
	            this.state = 308;
	            this.match(SqlBaseParser.COLUMN);
	            this.state = 311;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,20,this._ctx);
	            if(la_===1) {
	                this.state = 309;
	                this.match(SqlBaseParser.IF);
	                this.state = 310;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 313;
	            localctx.from = this.identifier();
	            this.state = 314;
	            this.match(SqlBaseParser.TO);
	            this.state = 315;
	            localctx.to = this.identifier();
	            break;

	        case 15:
	            localctx = new DropColumnContext(this, localctx);
	            this.enterOuterAlt(localctx, 15);
	            this.state = 317;
	            this.match(SqlBaseParser.ALTER);
	            this.state = 318;
	            this.match(SqlBaseParser.TABLE);
	            this.state = 321;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,21,this._ctx);
	            if(la_===1) {
	                this.state = 319;
	                this.match(SqlBaseParser.IF);
	                this.state = 320;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 323;
	            localctx.tableName = this.qualifiedName();
	            this.state = 324;
	            this.match(SqlBaseParser.DROP);
	            this.state = 325;
	            this.match(SqlBaseParser.COLUMN);
	            this.state = 328;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,22,this._ctx);
	            if(la_===1) {
	                this.state = 326;
	                this.match(SqlBaseParser.IF);
	                this.state = 327;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 330;
	            localctx.column = this.qualifiedName();
	            break;

	        case 16:
	            localctx = new AddColumnContext(this, localctx);
	            this.enterOuterAlt(localctx, 16);
	            this.state = 332;
	            this.match(SqlBaseParser.ALTER);
	            this.state = 333;
	            this.match(SqlBaseParser.TABLE);
	            this.state = 336;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,23,this._ctx);
	            if(la_===1) {
	                this.state = 334;
	                this.match(SqlBaseParser.IF);
	                this.state = 335;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 338;
	            localctx.tableName = this.qualifiedName();
	            this.state = 339;
	            this.match(SqlBaseParser.ADD);
	            this.state = 340;
	            this.match(SqlBaseParser.COLUMN);
	            this.state = 344;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,24,this._ctx);
	            if(la_===1) {
	                this.state = 341;
	                this.match(SqlBaseParser.IF);
	                this.state = 342;
	                this.match(SqlBaseParser.NOT);
	                this.state = 343;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 346;
	            localctx.column = this.columnDefinition();
	            break;

	        case 17:
	            localctx = new AnalyzeContext(this, localctx);
	            this.enterOuterAlt(localctx, 17);
	            this.state = 348;
	            this.match(SqlBaseParser.ANALYZE);
	            this.state = 349;
	            this.qualifiedName();
	            this.state = 352;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===216) {
	                this.state = 350;
	                this.match(SqlBaseParser.WITH);
	                this.state = 351;
	                this.properties();
	            }

	            break;

	        case 18:
	            localctx = new CreateTypeContext(this, localctx);
	            this.enterOuterAlt(localctx, 18);
	            this.state = 354;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 355;
	            this.match(SqlBaseParser.TYPE);
	            this.state = 356;
	            this.qualifiedName();
	            this.state = 357;
	            this.match(SqlBaseParser.AS);
	            this.state = 370;
	            this._errHandler.sync(this);
	            switch(this._input.LA(1)) {
	            case 2:
	                this.state = 358;
	                this.match(SqlBaseParser.T__1);
	                this.state = 359;
	                this.sqlParameterDeclaration();
	                this.state = 364;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 360;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 361;
	                    this.sqlParameterDeclaration();
	                    this.state = 366;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	                this.state = 367;
	                this.match(SqlBaseParser.T__2);
	                break;
	            case 10:
	            case 11:
	            case 12:
	            case 14:
	            case 16:
	            case 17:
	            case 19:
	            case 20:
	            case 21:
	            case 24:
	            case 25:
	            case 26:
	            case 29:
	            case 30:
	            case 31:
	            case 32:
	            case 33:
	            case 34:
	            case 39:
	            case 41:
	            case 45:
	            case 46:
	            case 47:
	            case 49:
	            case 51:
	            case 53:
	            case 55:
	            case 61:
	            case 64:
	            case 66:
	            case 68:
	            case 69:
	            case 70:
	            case 71:
	            case 73:
	            case 76:
	            case 77:
	            case 78:
	            case 79:
	            case 80:
	            case 81:
	            case 84:
	            case 86:
	            case 87:
	            case 88:
	            case 90:
	            case 92:
	            case 95:
	            case 97:
	            case 98:
	            case 100:
	            case 101:
	            case 103:
	            case 104:
	            case 105:
	            case 107:
	            case 109:
	            case 112:
	            case 113:
	            case 114:
	            case 115:
	            case 116:
	            case 117:
	            case 119:
	            case 120:
	            case 121:
	            case 122:
	            case 123:
	            case 124:
	            case 128:
	            case 129:
	            case 130:
	            case 131:
	            case 133:
	            case 134:
	            case 137:
	            case 139:
	            case 140:
	            case 141:
	            case 142:
	            case 143:
	            case 144:
	            case 146:
	            case 147:
	            case 148:
	            case 149:
	            case 151:
	            case 152:
	            case 153:
	            case 154:
	            case 155:
	            case 156:
	            case 157:
	            case 158:
	            case 159:
	            case 160:
	            case 162:
	            case 163:
	            case 164:
	            case 166:
	            case 167:
	            case 168:
	            case 169:
	            case 170:
	            case 171:
	            case 173:
	            case 174:
	            case 175:
	            case 176:
	            case 177:
	            case 178:
	            case 179:
	            case 180:
	            case 181:
	            case 182:
	            case 183:
	            case 184:
	            case 185:
	            case 187:
	            case 188:
	            case 189:
	            case 190:
	            case 192:
	            case 193:
	            case 194:
	            case 195:
	            case 197:
	            case 198:
	            case 199:
	            case 201:
	            case 202:
	            case 205:
	            case 206:
	            case 207:
	            case 209:
	            case 211:
	            case 212:
	            case 213:
	            case 217:
	            case 218:
	            case 219:
	            case 220:
	            case 239:
	            case 240:
	            case 241:
	            case 242:
	            case 243:
	            case 244:
	            case 245:
	                this.state = 369;
	                this.type(0);
	                break;
	            default:
	                throw new antlr4.error.NoViableAltException(this);
	            }
	            break;

	        case 19:
	            localctx = new CreateViewContext(this, localctx);
	            this.enterOuterAlt(localctx, 19);
	            this.state = 372;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 375;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===135) {
	                this.state = 373;
	                this.match(SqlBaseParser.OR);
	                this.state = 374;
	                this.match(SqlBaseParser.REPLACE);
	            }

	            this.state = 377;
	            this.match(SqlBaseParser.VIEW);
	            this.state = 378;
	            this.qualifiedName();
	            this.state = 381;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===171) {
	                this.state = 379;
	                this.match(SqlBaseParser.SECURITY);
	                this.state = 380;
	                _la = this._input.LA(1);
	                if(!(_la===49 || _la===97)) {
	                this._errHandler.recoverInline(this);
	                }
	                else {
	                	this._errHandler.reportMatch(this);
	                    this.consume();
	                }
	            }

	            this.state = 383;
	            this.match(SqlBaseParser.AS);
	            this.state = 384;
	            this.query();
	            break;

	        case 20:
	            localctx = new DropViewContext(this, localctx);
	            this.enterOuterAlt(localctx, 20);
	            this.state = 386;
	            this.match(SqlBaseParser.DROP);
	            this.state = 387;
	            this.match(SqlBaseParser.VIEW);
	            this.state = 390;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,30,this._ctx);
	            if(la_===1) {
	                this.state = 388;
	                this.match(SqlBaseParser.IF);
	                this.state = 389;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 392;
	            this.qualifiedName();
	            break;

	        case 21:
	            localctx = new CreateMaterializedViewContext(this, localctx);
	            this.enterOuterAlt(localctx, 21);
	            this.state = 393;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 394;
	            this.match(SqlBaseParser.MATERIALIZED);
	            this.state = 395;
	            this.match(SqlBaseParser.VIEW);
	            this.state = 399;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,31,this._ctx);
	            if(la_===1) {
	                this.state = 396;
	                this.match(SqlBaseParser.IF);
	                this.state = 397;
	                this.match(SqlBaseParser.NOT);
	                this.state = 398;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 401;
	            this.qualifiedName();
	            this.state = 404;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===32) {
	                this.state = 402;
	                this.match(SqlBaseParser.COMMENT);
	                this.state = 403;
	                this.string();
	            }

	            this.state = 408;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===216) {
	                this.state = 406;
	                this.match(SqlBaseParser.WITH);
	                this.state = 407;
	                this.properties();
	            }

	            this.state = 410;
	            this.match(SqlBaseParser.AS);
	            this.state = 416;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,34,this._ctx);
	            switch(la_) {
	            case 1:
	                this.state = 411;
	                this.query();
	                break;

	            case 2:
	                this.state = 412;
	                this.match(SqlBaseParser.T__1);
	                this.state = 413;
	                this.query();
	                this.state = 414;
	                this.match(SqlBaseParser.T__2);
	                break;

	            }
	            break;

	        case 22:
	            localctx = new DropMaterializedViewContext(this, localctx);
	            this.enterOuterAlt(localctx, 22);
	            this.state = 418;
	            this.match(SqlBaseParser.DROP);
	            this.state = 419;
	            this.match(SqlBaseParser.MATERIALIZED);
	            this.state = 420;
	            this.match(SqlBaseParser.VIEW);
	            this.state = 423;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,35,this._ctx);
	            if(la_===1) {
	                this.state = 421;
	                this.match(SqlBaseParser.IF);
	                this.state = 422;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 425;
	            this.qualifiedName();
	            break;

	        case 23:
	            localctx = new RefreshMaterializedViewContext(this, localctx);
	            this.enterOuterAlt(localctx, 23);
	            this.state = 426;
	            this.match(SqlBaseParser.REFRESH);
	            this.state = 427;
	            this.match(SqlBaseParser.MATERIALIZED);
	            this.state = 428;
	            this.match(SqlBaseParser.VIEW);
	            this.state = 429;
	            this.qualifiedName();
	            this.state = 430;
	            this.match(SqlBaseParser.WHERE);
	            this.state = 431;
	            this.booleanExpression(0);
	            break;

	        case 24:
	            localctx = new CreateFunctionContext(this, localctx);
	            this.enterOuterAlt(localctx, 24);
	            this.state = 433;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 436;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===135) {
	                this.state = 434;
	                this.match(SqlBaseParser.OR);
	                this.state = 435;
	                this.match(SqlBaseParser.REPLACE);
	            }

	            this.state = 439;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===189) {
	                this.state = 438;
	                this.match(SqlBaseParser.TEMPORARY);
	            }

	            this.state = 441;
	            this.match(SqlBaseParser.FUNCTION);
	            this.state = 442;
	            localctx.functionName = this.qualifiedName();
	            this.state = 443;
	            this.match(SqlBaseParser.T__1);
	            this.state = 452;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if((((_la) & ~0x1f) === 0 && ((1 << _la) & 3879427072) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 548070023) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2513695477) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 2413794779) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794171) !== 0) || ((((_la - 239)) & ~0x1f) === 0 && ((1 << (_la - 239)) & 15) !== 0)) {
	                this.state = 444;
	                this.sqlParameterDeclaration();
	                this.state = 449;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 445;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 446;
	                    this.sqlParameterDeclaration();
	                    this.state = 451;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            this.state = 454;
	            this.match(SqlBaseParser.T__2);
	            this.state = 455;
	            this.match(SqlBaseParser.RETURNS);
	            this.state = 456;
	            localctx.returnType = this.type(0);
	            this.state = 459;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===32) {
	                this.state = 457;
	                this.match(SqlBaseParser.COMMENT);
	                this.state = 458;
	                this.string();
	            }

	            this.state = 461;
	            this.routineCharacteristics();
	            this.state = 462;
	            this.routineBody();
	            break;

	        case 25:
	            localctx = new AlterFunctionContext(this, localctx);
	            this.enterOuterAlt(localctx, 25);
	            this.state = 464;
	            this.match(SqlBaseParser.ALTER);
	            this.state = 465;
	            this.match(SqlBaseParser.FUNCTION);
	            this.state = 466;
	            this.qualifiedName();
	            this.state = 468;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===2) {
	                this.state = 467;
	                this.types();
	            }

	            this.state = 470;
	            this.alterRoutineCharacteristics();
	            break;

	        case 26:
	            localctx = new DropFunctionContext(this, localctx);
	            this.enterOuterAlt(localctx, 26);
	            this.state = 472;
	            this.match(SqlBaseParser.DROP);
	            this.state = 474;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===189) {
	                this.state = 473;
	                this.match(SqlBaseParser.TEMPORARY);
	            }

	            this.state = 476;
	            this.match(SqlBaseParser.FUNCTION);
	            this.state = 479;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,43,this._ctx);
	            if(la_===1) {
	                this.state = 477;
	                this.match(SqlBaseParser.IF);
	                this.state = 478;
	                this.match(SqlBaseParser.EXISTS);

	            }
	            this.state = 481;
	            this.qualifiedName();
	            this.state = 483;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===2) {
	                this.state = 482;
	                this.types();
	            }

	            break;

	        case 27:
	            localctx = new CallContext(this, localctx);
	            this.enterOuterAlt(localctx, 27);
	            this.state = 485;
	            this.match(SqlBaseParser.CALL);
	            this.state = 486;
	            this.qualifiedName();
	            this.state = 487;
	            this.match(SqlBaseParser.T__1);
	            this.state = 496;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2695561095) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) {
	                this.state = 488;
	                this.callArgument();
	                this.state = 493;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 489;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 490;
	                    this.callArgument();
	                    this.state = 495;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            this.state = 498;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 28:
	            localctx = new CreateRoleContext(this, localctx);
	            this.enterOuterAlt(localctx, 28);
	            this.state = 500;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 501;
	            this.match(SqlBaseParser.ROLE);
	            this.state = 502;
	            localctx.name = this.identifier();
	            this.state = 506;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===216) {
	                this.state = 503;
	                this.match(SqlBaseParser.WITH);
	                this.state = 504;
	                this.match(SqlBaseParser.ADMIN);
	                this.state = 505;
	                this.grantor();
	            }

	            break;

	        case 29:
	            localctx = new DropRoleContext(this, localctx);
	            this.enterOuterAlt(localctx, 29);
	            this.state = 508;
	            this.match(SqlBaseParser.DROP);
	            this.state = 509;
	            this.match(SqlBaseParser.ROLE);
	            this.state = 510;
	            localctx.name = this.identifier();
	            break;

	        case 30:
	            localctx = new GrantRolesContext(this, localctx);
	            this.enterOuterAlt(localctx, 30);
	            this.state = 511;
	            this.match(SqlBaseParser.GRANT);
	            this.state = 512;
	            this.roles();
	            this.state = 513;
	            this.match(SqlBaseParser.TO);
	            this.state = 514;
	            this.principal();
	            this.state = 519;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 515;
	                this.match(SqlBaseParser.T__3);
	                this.state = 516;
	                this.principal();
	                this.state = 521;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	            this.state = 525;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===216) {
	                this.state = 522;
	                this.match(SqlBaseParser.WITH);
	                this.state = 523;
	                this.match(SqlBaseParser.ADMIN);
	                this.state = 524;
	                this.match(SqlBaseParser.OPTION);
	            }

	            this.state = 530;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===79) {
	                this.state = 527;
	                this.match(SqlBaseParser.GRANTED);
	                this.state = 528;
	                this.match(SqlBaseParser.BY);
	                this.state = 529;
	                this.grantor();
	            }

	            break;

	        case 31:
	            localctx = new RevokeRolesContext(this, localctx);
	            this.enterOuterAlt(localctx, 31);
	            this.state = 532;
	            this.match(SqlBaseParser.REVOKE);
	            this.state = 536;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,51,this._ctx);
	            if(la_===1) {
	                this.state = 533;
	                this.match(SqlBaseParser.ADMIN);
	                this.state = 534;
	                this.match(SqlBaseParser.OPTION);
	                this.state = 535;
	                this.match(SqlBaseParser.FOR);

	            }
	            this.state = 538;
	            this.roles();
	            this.state = 539;
	            this.match(SqlBaseParser.FROM);
	            this.state = 540;
	            this.principal();
	            this.state = 545;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 541;
	                this.match(SqlBaseParser.T__3);
	                this.state = 542;
	                this.principal();
	                this.state = 547;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	            this.state = 551;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===79) {
	                this.state = 548;
	                this.match(SqlBaseParser.GRANTED);
	                this.state = 549;
	                this.match(SqlBaseParser.BY);
	                this.state = 550;
	                this.grantor();
	            }

	            break;

	        case 32:
	            localctx = new SetRoleContext(this, localctx);
	            this.enterOuterAlt(localctx, 32);
	            this.state = 553;
	            this.match(SqlBaseParser.SET);
	            this.state = 554;
	            this.match(SqlBaseParser.ROLE);
	            this.state = 558;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,54,this._ctx);
	            switch(la_) {
	            case 1:
	                this.state = 555;
	                this.match(SqlBaseParser.ALL);
	                break;

	            case 2:
	                this.state = 556;
	                this.match(SqlBaseParser.NONE);
	                break;

	            case 3:
	                this.state = 557;
	                localctx.role = this.identifier();
	                break;

	            }
	            break;

	        case 33:
	            localctx = new GrantContext(this, localctx);
	            this.enterOuterAlt(localctx, 33);
	            this.state = 560;
	            this.match(SqlBaseParser.GRANT);
	            this.state = 571;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,56,this._ctx);
	            switch(la_) {
	            case 1:
	                this.state = 561;
	                this.privilege();
	                this.state = 566;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 562;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 563;
	                    this.privilege();
	                    this.state = 568;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	                break;

	            case 2:
	                this.state = 569;
	                this.match(SqlBaseParser.ALL);
	                this.state = 570;
	                this.match(SqlBaseParser.PRIVILEGES);
	                break;

	            }
	            this.state = 573;
	            this.match(SqlBaseParser.ON);
	            this.state = 575;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===186) {
	                this.state = 574;
	                this.match(SqlBaseParser.TABLE);
	            }

	            this.state = 577;
	            this.qualifiedName();
	            this.state = 578;
	            this.match(SqlBaseParser.TO);
	            this.state = 579;
	            localctx.grantee = this.principal();
	            this.state = 583;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===216) {
	                this.state = 580;
	                this.match(SqlBaseParser.WITH);
	                this.state = 581;
	                this.match(SqlBaseParser.GRANT);
	                this.state = 582;
	                this.match(SqlBaseParser.OPTION);
	            }

	            break;

	        case 34:
	            localctx = new RevokeContext(this, localctx);
	            this.enterOuterAlt(localctx, 34);
	            this.state = 585;
	            this.match(SqlBaseParser.REVOKE);
	            this.state = 589;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,59,this._ctx);
	            if(la_===1) {
	                this.state = 586;
	                this.match(SqlBaseParser.GRANT);
	                this.state = 587;
	                this.match(SqlBaseParser.OPTION);
	                this.state = 588;
	                this.match(SqlBaseParser.FOR);

	            }
	            this.state = 601;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,61,this._ctx);
	            switch(la_) {
	            case 1:
	                this.state = 591;
	                this.privilege();
	                this.state = 596;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 592;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 593;
	                    this.privilege();
	                    this.state = 598;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	                break;

	            case 2:
	                this.state = 599;
	                this.match(SqlBaseParser.ALL);
	                this.state = 600;
	                this.match(SqlBaseParser.PRIVILEGES);
	                break;

	            }
	            this.state = 603;
	            this.match(SqlBaseParser.ON);
	            this.state = 605;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===186) {
	                this.state = 604;
	                this.match(SqlBaseParser.TABLE);
	            }

	            this.state = 607;
	            this.qualifiedName();
	            this.state = 608;
	            this.match(SqlBaseParser.FROM);
	            this.state = 609;
	            localctx.grantee = this.principal();
	            break;

	        case 35:
	            localctx = new ShowGrantsContext(this, localctx);
	            this.enterOuterAlt(localctx, 35);
	            this.state = 611;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 612;
	            this.match(SqlBaseParser.GRANTS);
	            this.state = 618;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===132) {
	                this.state = 613;
	                this.match(SqlBaseParser.ON);
	                this.state = 615;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                if(_la===186) {
	                    this.state = 614;
	                    this.match(SqlBaseParser.TABLE);
	                }

	                this.state = 617;
	                this.qualifiedName();
	            }

	            break;

	        case 36:
	            localctx = new ExplainContext(this, localctx);
	            this.enterOuterAlt(localctx, 36);
	            this.state = 620;
	            this.match(SqlBaseParser.EXPLAIN);
	            this.state = 622;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,65,this._ctx);
	            if(la_===1) {
	                this.state = 621;
	                this.match(SqlBaseParser.ANALYZE);

	            }
	            this.state = 625;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===211) {
	                this.state = 624;
	                this.match(SqlBaseParser.VERBOSE);
	            }

	            this.state = 638;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,68,this._ctx);
	            if(la_===1) {
	                this.state = 627;
	                this.match(SqlBaseParser.T__1);
	                this.state = 628;
	                this.explainOption();
	                this.state = 633;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 629;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 630;
	                    this.explainOption();
	                    this.state = 635;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	                this.state = 636;
	                this.match(SqlBaseParser.T__2);

	            }
	            this.state = 640;
	            this.statement();
	            break;

	        case 37:
	            localctx = new ShowCreateTableContext(this, localctx);
	            this.enterOuterAlt(localctx, 37);
	            this.state = 641;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 642;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 643;
	            this.match(SqlBaseParser.TABLE);
	            this.state = 644;
	            this.qualifiedName();
	            break;

	        case 38:
	            localctx = new ShowCreateViewContext(this, localctx);
	            this.enterOuterAlt(localctx, 38);
	            this.state = 645;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 646;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 647;
	            this.match(SqlBaseParser.VIEW);
	            this.state = 648;
	            this.qualifiedName();
	            break;

	        case 39:
	            localctx = new ShowCreateMaterializedViewContext(this, localctx);
	            this.enterOuterAlt(localctx, 39);
	            this.state = 649;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 650;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 651;
	            this.match(SqlBaseParser.MATERIALIZED);
	            this.state = 652;
	            this.match(SqlBaseParser.VIEW);
	            this.state = 653;
	            this.qualifiedName();
	            break;

	        case 40:
	            localctx = new ShowCreateFunctionContext(this, localctx);
	            this.enterOuterAlt(localctx, 40);
	            this.state = 654;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 655;
	            this.match(SqlBaseParser.CREATE);
	            this.state = 656;
	            this.match(SqlBaseParser.FUNCTION);
	            this.state = 657;
	            this.qualifiedName();
	            this.state = 659;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===2) {
	                this.state = 658;
	                this.types();
	            }

	            break;

	        case 41:
	            localctx = new ShowTablesContext(this, localctx);
	            this.enterOuterAlt(localctx, 41);
	            this.state = 661;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 662;
	            this.match(SqlBaseParser.TABLES);
	            this.state = 665;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===74 || _la===89) {
	                this.state = 663;
	                _la = this._input.LA(1);
	                if(!(_la===74 || _la===89)) {
	                this._errHandler.recoverInline(this);
	                }
	                else {
	                	this._errHandler.reportMatch(this);
	                    this.consume();
	                }
	                this.state = 664;
	                this.qualifiedName();
	            }

	            this.state = 673;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===108) {
	                this.state = 667;
	                this.match(SqlBaseParser.LIKE);
	                this.state = 668;
	                localctx.pattern = this.string();
	                this.state = 671;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                if(_la===59) {
	                    this.state = 669;
	                    this.match(SqlBaseParser.ESCAPE);
	                    this.state = 670;
	                    localctx.escape = this.string();
	                }

	            }

	            break;

	        case 42:
	            localctx = new ShowSchemasContext(this, localctx);
	            this.enterOuterAlt(localctx, 42);
	            this.state = 675;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 676;
	            this.match(SqlBaseParser.SCHEMAS);
	            this.state = 679;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===74 || _la===89) {
	                this.state = 677;
	                _la = this._input.LA(1);
	                if(!(_la===74 || _la===89)) {
	                this._errHandler.recoverInline(this);
	                }
	                else {
	                	this._errHandler.reportMatch(this);
	                    this.consume();
	                }
	                this.state = 678;
	                this.identifier();
	            }

	            this.state = 687;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===108) {
	                this.state = 681;
	                this.match(SqlBaseParser.LIKE);
	                this.state = 682;
	                localctx.pattern = this.string();
	                this.state = 685;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                if(_la===59) {
	                    this.state = 683;
	                    this.match(SqlBaseParser.ESCAPE);
	                    this.state = 684;
	                    localctx.escape = this.string();
	                }

	            }

	            break;

	        case 43:
	            localctx = new ShowCatalogsContext(this, localctx);
	            this.enterOuterAlt(localctx, 43);
	            this.state = 689;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 690;
	            this.match(SqlBaseParser.CATALOGS);
	            this.state = 697;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===108) {
	                this.state = 691;
	                this.match(SqlBaseParser.LIKE);
	                this.state = 692;
	                localctx.pattern = this.string();
	                this.state = 695;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                if(_la===59) {
	                    this.state = 693;
	                    this.match(SqlBaseParser.ESCAPE);
	                    this.state = 694;
	                    localctx.escape = this.string();
	                }

	            }

	            break;

	        case 44:
	            localctx = new ShowColumnsContext(this, localctx);
	            this.enterOuterAlt(localctx, 44);
	            this.state = 699;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 700;
	            this.match(SqlBaseParser.COLUMNS);
	            this.state = 701;
	            _la = this._input.LA(1);
	            if(!(_la===74 || _la===89)) {
	            this._errHandler.recoverInline(this);
	            }
	            else {
	            	this._errHandler.reportMatch(this);
	                this.consume();
	            }
	            this.state = 702;
	            this.qualifiedName();
	            break;

	        case 45:
	            localctx = new ShowStatsContext(this, localctx);
	            this.enterOuterAlt(localctx, 45);
	            this.state = 703;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 704;
	            this.match(SqlBaseParser.STATS);
	            this.state = 705;
	            this.match(SqlBaseParser.FOR);
	            this.state = 706;
	            this.qualifiedName();
	            break;

	        case 46:
	            localctx = new ShowStatsForQueryContext(this, localctx);
	            this.enterOuterAlt(localctx, 46);
	            this.state = 707;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 708;
	            this.match(SqlBaseParser.STATS);
	            this.state = 709;
	            this.match(SqlBaseParser.FOR);
	            this.state = 710;
	            this.match(SqlBaseParser.T__1);
	            this.state = 711;
	            this.querySpecification();
	            this.state = 712;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 47:
	            localctx = new ShowRolesContext(this, localctx);
	            this.enterOuterAlt(localctx, 47);
	            this.state = 714;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 716;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===39) {
	                this.state = 715;
	                this.match(SqlBaseParser.CURRENT);
	            }

	            this.state = 718;
	            this.match(SqlBaseParser.ROLES);
	            this.state = 721;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===74 || _la===89) {
	                this.state = 719;
	                _la = this._input.LA(1);
	                if(!(_la===74 || _la===89)) {
	                this._errHandler.recoverInline(this);
	                }
	                else {
	                	this._errHandler.reportMatch(this);
	                    this.consume();
	                }
	                this.state = 720;
	                this.identifier();
	            }

	            break;

	        case 48:
	            localctx = new ShowRoleGrantsContext(this, localctx);
	            this.enterOuterAlt(localctx, 48);
	            this.state = 723;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 724;
	            this.match(SqlBaseParser.ROLE);
	            this.state = 725;
	            this.match(SqlBaseParser.GRANTS);
	            this.state = 728;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===74 || _la===89) {
	                this.state = 726;
	                _la = this._input.LA(1);
	                if(!(_la===74 || _la===89)) {
	                this._errHandler.recoverInline(this);
	                }
	                else {
	                	this._errHandler.reportMatch(this);
	                    this.consume();
	                }
	                this.state = 727;
	                this.identifier();
	            }

	            break;

	        case 49:
	            localctx = new ShowColumnsContext(this, localctx);
	            this.enterOuterAlt(localctx, 49);
	            this.state = 730;
	            this.match(SqlBaseParser.DESCRIBE);
	            this.state = 731;
	            this.qualifiedName();
	            break;

	        case 50:
	            localctx = new ShowColumnsContext(this, localctx);
	            this.enterOuterAlt(localctx, 50);
	            this.state = 732;
	            this.match(SqlBaseParser.DESC);
	            this.state = 733;
	            this.qualifiedName();
	            break;

	        case 51:
	            localctx = new ShowFunctionsContext(this, localctx);
	            this.enterOuterAlt(localctx, 51);
	            this.state = 734;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 735;
	            this.match(SqlBaseParser.FUNCTIONS);
	            this.state = 742;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===108) {
	                this.state = 736;
	                this.match(SqlBaseParser.LIKE);
	                this.state = 737;
	                localctx.pattern = this.string();
	                this.state = 740;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                if(_la===59) {
	                    this.state = 738;
	                    this.match(SqlBaseParser.ESCAPE);
	                    this.state = 739;
	                    localctx.escape = this.string();
	                }

	            }

	            break;

	        case 52:
	            localctx = new ShowSessionContext(this, localctx);
	            this.enterOuterAlt(localctx, 52);
	            this.state = 744;
	            this.match(SqlBaseParser.SHOW);
	            this.state = 745;
	            this.match(SqlBaseParser.SESSION);
	            this.state = 752;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===108) {
	                this.state = 746;
	                this.match(SqlBaseParser.LIKE);
	                this.state = 747;
	                localctx.pattern = this.string();
	                this.state = 750;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                if(_la===59) {
	                    this.state = 748;
	                    this.match(SqlBaseParser.ESCAPE);
	                    this.state = 749;
	                    localctx.escape = this.string();
	                }

	            }

	            break;

	        case 53:
	            localctx = new SetSessionContext(this, localctx);
	            this.enterOuterAlt(localctx, 53);
	            this.state = 754;
	            this.match(SqlBaseParser.SET);
	            this.state = 755;
	            this.match(SqlBaseParser.SESSION);
	            this.state = 756;
	            this.qualifiedName();
	            this.state = 757;
	            this.match(SqlBaseParser.EQ);
	            this.state = 758;
	            this.expression();
	            break;

	        case 54:
	            localctx = new ResetSessionContext(this, localctx);
	            this.enterOuterAlt(localctx, 54);
	            this.state = 760;
	            this.match(SqlBaseParser.RESET);
	            this.state = 761;
	            this.match(SqlBaseParser.SESSION);
	            this.state = 762;
	            this.qualifiedName();
	            break;

	        case 55:
	            localctx = new StartTransactionContext(this, localctx);
	            this.enterOuterAlt(localctx, 55);
	            this.state = 763;
	            this.match(SqlBaseParser.START);
	            this.state = 764;
	            this.match(SqlBaseParser.TRANSACTION);
	            this.state = 773;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===100 || _la===149) {
	                this.state = 765;
	                this.transactionMode();
	                this.state = 770;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 766;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 767;
	                    this.transactionMode();
	                    this.state = 772;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            break;

	        case 56:
	            localctx = new CommitContext(this, localctx);
	            this.enterOuterAlt(localctx, 56);
	            this.state = 775;
	            this.match(SqlBaseParser.COMMIT);
	            this.state = 777;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===217) {
	                this.state = 776;
	                this.match(SqlBaseParser.WORK);
	            }

	            break;

	        case 57:
	            localctx = new RollbackContext(this, localctx);
	            this.enterOuterAlt(localctx, 57);
	            this.state = 779;
	            this.match(SqlBaseParser.ROLLBACK);
	            this.state = 781;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===217) {
	                this.state = 780;
	                this.match(SqlBaseParser.WORK);
	            }

	            break;

	        case 58:
	            localctx = new PrepareContext(this, localctx);
	            this.enterOuterAlt(localctx, 58);
	            this.state = 783;
	            this.match(SqlBaseParser.PREPARE);
	            this.state = 784;
	            this.identifier();
	            this.state = 785;
	            this.match(SqlBaseParser.FROM);
	            this.state = 786;
	            this.statement();
	            break;

	        case 59:
	            localctx = new DeallocateContext(this, localctx);
	            this.enterOuterAlt(localctx, 59);
	            this.state = 788;
	            this.match(SqlBaseParser.DEALLOCATE);
	            this.state = 789;
	            this.match(SqlBaseParser.PREPARE);
	            this.state = 790;
	            this.identifier();
	            break;

	        case 60:
	            localctx = new ExecuteContext(this, localctx);
	            this.enterOuterAlt(localctx, 60);
	            this.state = 791;
	            this.match(SqlBaseParser.EXECUTE);
	            this.state = 792;
	            this.identifier();
	            this.state = 802;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===208) {
	                this.state = 793;
	                this.match(SqlBaseParser.USING);
	                this.state = 794;
	                this.expression();
	                this.state = 799;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 795;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 796;
	                    this.expression();
	                    this.state = 801;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            break;

	        case 61:
	            localctx = new DescribeInputContext(this, localctx);
	            this.enterOuterAlt(localctx, 61);
	            this.state = 804;
	            this.match(SqlBaseParser.DESCRIBE);
	            this.state = 805;
	            this.match(SqlBaseParser.INPUT);
	            this.state = 806;
	            this.identifier();
	            break;

	        case 62:
	            localctx = new DescribeOutputContext(this, localctx);
	            this.enterOuterAlt(localctx, 62);
	            this.state = 807;
	            this.match(SqlBaseParser.DESCRIBE);
	            this.state = 808;
	            this.match(SqlBaseParser.OUTPUT);
	            this.state = 809;
	            this.identifier();
	            break;

	        case 63:
	            localctx = new UpdateContext(this, localctx);
	            this.enterOuterAlt(localctx, 63);
	            this.state = 810;
	            this.match(SqlBaseParser.UPDATE);
	            this.state = 811;
	            this.qualifiedName();
	            this.state = 812;
	            this.match(SqlBaseParser.SET);
	            this.state = 813;
	            this.updateAssignment();
	            this.state = 818;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 814;
	                this.match(SqlBaseParser.T__3);
	                this.state = 815;
	                this.updateAssignment();
	                this.state = 820;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	            this.state = 823;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===215) {
	                this.state = 821;
	                this.match(SqlBaseParser.WHERE);
	                this.state = 822;
	                localctx.where = this.booleanExpression(0);
	            }

	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	query() {
	    let localctx = new QueryContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 8, SqlBaseParser.RULE_query);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 828;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===216) {
	            this.state = 827;
	            this.with_();
	        }

	        this.state = 830;
	        this.queryNoWith();
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	with_() {
	    let localctx = new WithContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 10, SqlBaseParser.RULE_with);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 832;
	        this.match(SqlBaseParser.WITH);
	        this.state = 834;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===150) {
	            this.state = 833;
	            this.match(SqlBaseParser.RECURSIVE);
	        }

	        this.state = 836;
	        this.namedQuery();
	        this.state = 841;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        while(_la===4) {
	            this.state = 837;
	            this.match(SqlBaseParser.T__3);
	            this.state = 838;
	            this.namedQuery();
	            this.state = 843;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	tableElement() {
	    let localctx = new TableElementContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 12, SqlBaseParser.RULE_tableElement);
	    try {
	        this.state = 846;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 10:
	        case 11:
	        case 12:
	        case 14:
	        case 16:
	        case 17:
	        case 19:
	        case 20:
	        case 21:
	        case 24:
	        case 25:
	        case 26:
	        case 29:
	        case 30:
	        case 31:
	        case 32:
	        case 33:
	        case 34:
	        case 39:
	        case 41:
	        case 45:
	        case 46:
	        case 47:
	        case 49:
	        case 51:
	        case 53:
	        case 55:
	        case 61:
	        case 64:
	        case 66:
	        case 68:
	        case 69:
	        case 70:
	        case 71:
	        case 73:
	        case 76:
	        case 77:
	        case 78:
	        case 79:
	        case 80:
	        case 81:
	        case 84:
	        case 86:
	        case 87:
	        case 88:
	        case 90:
	        case 92:
	        case 95:
	        case 97:
	        case 98:
	        case 100:
	        case 101:
	        case 103:
	        case 104:
	        case 105:
	        case 107:
	        case 109:
	        case 112:
	        case 113:
	        case 114:
	        case 115:
	        case 116:
	        case 117:
	        case 119:
	        case 120:
	        case 121:
	        case 122:
	        case 123:
	        case 124:
	        case 128:
	        case 129:
	        case 130:
	        case 131:
	        case 133:
	        case 134:
	        case 137:
	        case 139:
	        case 140:
	        case 141:
	        case 142:
	        case 143:
	        case 144:
	        case 146:
	        case 147:
	        case 148:
	        case 149:
	        case 151:
	        case 152:
	        case 153:
	        case 154:
	        case 155:
	        case 156:
	        case 157:
	        case 158:
	        case 159:
	        case 160:
	        case 162:
	        case 163:
	        case 164:
	        case 166:
	        case 167:
	        case 168:
	        case 169:
	        case 170:
	        case 171:
	        case 173:
	        case 174:
	        case 175:
	        case 176:
	        case 177:
	        case 178:
	        case 179:
	        case 180:
	        case 181:
	        case 182:
	        case 183:
	        case 184:
	        case 185:
	        case 187:
	        case 188:
	        case 189:
	        case 190:
	        case 192:
	        case 193:
	        case 194:
	        case 195:
	        case 197:
	        case 198:
	        case 199:
	        case 201:
	        case 202:
	        case 205:
	        case 206:
	        case 207:
	        case 209:
	        case 211:
	        case 212:
	        case 213:
	        case 217:
	        case 218:
	        case 219:
	        case 220:
	        case 239:
	        case 240:
	        case 241:
	        case 242:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 844;
	            this.columnDefinition();
	            break;
	        case 108:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 845;
	            this.likeClause();
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	columnDefinition() {
	    let localctx = new ColumnDefinitionContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 14, SqlBaseParser.RULE_columnDefinition);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 848;
	        this.identifier();
	        this.state = 849;
	        this.type(0);
	        this.state = 852;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===126) {
	            this.state = 850;
	            this.match(SqlBaseParser.NOT);
	            this.state = 851;
	            this.match(SqlBaseParser.NULL);
	        }

	        this.state = 856;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===32) {
	            this.state = 854;
	            this.match(SqlBaseParser.COMMENT);
	            this.state = 855;
	            this.string();
	        }

	        this.state = 860;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===216) {
	            this.state = 858;
	            this.match(SqlBaseParser.WITH);
	            this.state = 859;
	            this.properties();
	        }

	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	likeClause() {
	    let localctx = new LikeClauseContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 16, SqlBaseParser.RULE_likeClause);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 862;
	        this.match(SqlBaseParser.LIKE);
	        this.state = 863;
	        this.qualifiedName();
	        this.state = 866;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===61 || _la===90) {
	            this.state = 864;
	            localctx.optionType = this._input.LT(1);
	            _la = this._input.LA(1);
	            if(!(_la===61 || _la===90)) {
	                localctx.optionType = this._errHandler.recoverInline(this);
	            }
	            else {
	            	this._errHandler.reportMatch(this);
	                this.consume();
	            }
	            this.state = 865;
	            this.match(SqlBaseParser.PROPERTIES);
	        }

	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	properties() {
	    let localctx = new PropertiesContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 18, SqlBaseParser.RULE_properties);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 868;
	        this.match(SqlBaseParser.T__1);
	        this.state = 869;
	        this.property();
	        this.state = 874;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        while(_la===4) {
	            this.state = 870;
	            this.match(SqlBaseParser.T__3);
	            this.state = 871;
	            this.property();
	            this.state = 876;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	        }
	        this.state = 877;
	        this.match(SqlBaseParser.T__2);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	property() {
	    let localctx = new PropertyContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 20, SqlBaseParser.RULE_property);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 879;
	        this.identifier();
	        this.state = 880;
	        this.match(SqlBaseParser.EQ);
	        this.state = 881;
	        this.expression();
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	sqlParameterDeclaration() {
	    let localctx = new SqlParameterDeclarationContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 22, SqlBaseParser.RULE_sqlParameterDeclaration);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 883;
	        this.identifier();
	        this.state = 884;
	        this.type(0);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	routineCharacteristics() {
	    let localctx = new RoutineCharacteristicsContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 24, SqlBaseParser.RULE_routineCharacteristics);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 889;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        while(_la===25 || _la===53 || _la===103 || _la===126 || _la===159) {
	            this.state = 886;
	            this.routineCharacteristic();
	            this.state = 891;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	routineCharacteristic() {
	    let localctx = new RoutineCharacteristicContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 26, SqlBaseParser.RULE_routineCharacteristic);
	    try {
	        this.state = 896;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 103:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 892;
	            this.match(SqlBaseParser.LANGUAGE);
	            this.state = 893;
	            this.language();
	            break;
	        case 53:
	        case 126:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 894;
	            this.determinism();
	            break;
	        case 25:
	        case 159:
	            this.enterOuterAlt(localctx, 3);
	            this.state = 895;
	            this.nullCallClause();
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	alterRoutineCharacteristics() {
	    let localctx = new AlterRoutineCharacteristicsContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 28, SqlBaseParser.RULE_alterRoutineCharacteristics);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 901;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        while(_la===25 || _la===159) {
	            this.state = 898;
	            this.alterRoutineCharacteristic();
	            this.state = 903;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	alterRoutineCharacteristic() {
	    let localctx = new AlterRoutineCharacteristicContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 30, SqlBaseParser.RULE_alterRoutineCharacteristic);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 904;
	        this.nullCallClause();
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	routineBody() {
	    let localctx = new RoutineBodyContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 32, SqlBaseParser.RULE_routineBody);
	    try {
	        this.state = 908;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 158:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 906;
	            this.returnStatement();
	            break;
	        case 66:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 907;
	            this.externalBodyReference();
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	returnStatement() {
	    let localctx = new ReturnStatementContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 34, SqlBaseParser.RULE_returnStatement);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 910;
	        this.match(SqlBaseParser.RETURN);
	        this.state = 911;
	        this.expression();
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	externalBodyReference() {
	    let localctx = new ExternalBodyReferenceContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 36, SqlBaseParser.RULE_externalBodyReference);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 913;
	        this.match(SqlBaseParser.EXTERNAL);
	        this.state = 916;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===117) {
	            this.state = 914;
	            this.match(SqlBaseParser.NAME);
	            this.state = 915;
	            this.externalRoutineName();
	        }

	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	language() {
	    let localctx = new LanguageContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 38, SqlBaseParser.RULE_language);
	    try {
	        this.state = 920;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,108,this._ctx);
	        switch(la_) {
	        case 1:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 918;
	            this.match(SqlBaseParser.SQL);
	            break;

	        case 2:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 919;
	            this.identifier();
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	determinism() {
	    let localctx = new DeterminismContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 40, SqlBaseParser.RULE_determinism);
	    try {
	        this.state = 925;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 53:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 922;
	            this.match(SqlBaseParser.DETERMINISTIC);
	            break;
	        case 126:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 923;
	            this.match(SqlBaseParser.NOT);
	            this.state = 924;
	            this.match(SqlBaseParser.DETERMINISTIC);
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	nullCallClause() {
	    let localctx = new NullCallClauseContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 42, SqlBaseParser.RULE_nullCallClause);
	    try {
	        this.state = 936;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 159:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 927;
	            this.match(SqlBaseParser.RETURNS);
	            this.state = 928;
	            this.match(SqlBaseParser.NULL);
	            this.state = 929;
	            this.match(SqlBaseParser.ON);
	            this.state = 930;
	            this.match(SqlBaseParser.NULL);
	            this.state = 931;
	            this.match(SqlBaseParser.INPUT);
	            break;
	        case 25:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 932;
	            this.match(SqlBaseParser.CALLED);
	            this.state = 933;
	            this.match(SqlBaseParser.ON);
	            this.state = 934;
	            this.match(SqlBaseParser.NULL);
	            this.state = 935;
	            this.match(SqlBaseParser.INPUT);
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	externalRoutineName() {
	    let localctx = new ExternalRoutineNameContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 44, SqlBaseParser.RULE_externalRoutineName);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 938;
	        this.identifier();
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	queryNoWith() {
	    let localctx = new QueryNoWithContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 46, SqlBaseParser.RULE_queryNoWith);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 940;
	        this.queryTerm(0);
	        this.state = 951;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===136) {
	            this.state = 941;
	            this.match(SqlBaseParser.ORDER);
	            this.state = 942;
	            this.match(SqlBaseParser.BY);
	            this.state = 943;
	            this.sortItem();
	            this.state = 948;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 944;
	                this.match(SqlBaseParser.T__3);
	                this.state = 945;
	                this.sortItem();
	                this.state = 950;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	        }

	        this.state = 958;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===131) {
	            this.state = 953;
	            this.match(SqlBaseParser.OFFSET);
	            this.state = 954;
	            localctx.offset = this.match(SqlBaseParser.INTEGER_VALUE);
	            this.state = 956;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===166 || _la===167) {
	                this.state = 955;
	                _la = this._input.LA(1);
	                if(!(_la===166 || _la===167)) {
	                this._errHandler.recoverInline(this);
	                }
	                else {
	                	this._errHandler.reportMatch(this);
	                    this.consume();
	                }
	            }

	        }

	        this.state = 969;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,116,this._ctx);
	        if(la_===1) {
	            this.state = 967;
	            this._errHandler.sync(this);
	            switch (this._input.LA(1)) {
	            case 109:
	            	this.state = 960;
	            	this.match(SqlBaseParser.LIMIT);
	            	this.state = 961;
	            	localctx.limit = this._input.LT(1);
	            	_la = this._input.LA(1);
	            	if(!(_la===12 || _la===236)) {
	            	    localctx.limit = this._errHandler.recoverInline(this);
	            	}
	            	else {
	            		this._errHandler.reportMatch(this);
	            	    this.consume();
	            	}
	            	break;
	            case 68:
	            	this.state = 962;
	            	this.match(SqlBaseParser.FETCH);
	            	this.state = 963;
	            	this.match(SqlBaseParser.FIRST);
	            	this.state = 964;
	            	localctx.fetchFirstNRows = this.match(SqlBaseParser.INTEGER_VALUE);
	            	this.state = 965;
	            	this.match(SqlBaseParser.ROWS);
	            	this.state = 966;
	            	this.match(SqlBaseParser.ONLY);
	            	break;
	            case -1:
	            case 3:
	            case 216:
	            	break;
	            default:
	            	break;
	            }

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}


	queryTerm(_p) {
		if(_p===undefined) {
		    _p = 0;
		}
	    const _parentctx = this._ctx;
	    const _parentState = this.state;
	    let localctx = new QueryTermContext(this, this._ctx, _parentState);
	    let _prevctx = localctx;
	    const _startState = 48;
	    this.enterRecursionRule(localctx, 48, SqlBaseParser.RULE_queryTerm, _p);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        localctx = new QueryTermDefaultContext(this, localctx);
	        this._ctx = localctx;
	        _prevctx = localctx;

	        this.state = 972;
	        this.queryPrimary();
	        this._ctx.stop = this._input.LT(-1);
	        this.state = 988;
	        this._errHandler.sync(this);
	        var _alt = this._interp.adaptivePredict(this._input,120,this._ctx)
	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
	            if(_alt===1) {
	                if(this._parseListeners!==null) {
	                    this.triggerExitRuleEvent();
	                }
	                _prevctx = localctx;
	                this.state = 986;
	                this._errHandler.sync(this);
	                var la_ = this._interp.adaptivePredict(this._input,119,this._ctx);
	                switch(la_) {
	                case 1:
	                    localctx = new SetOperationContext(this, new QueryTermContext(this, _parentctx, _parentState));
	                    localctx.left = _prevctx;
	                    this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_queryTerm);
	                    this.state = 974;
	                    if (!( this.precpred(this._ctx, 2))) {
	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
	                    }
	                    this.state = 975;
	                    localctx.operator = this.match(SqlBaseParser.INTERSECT);
	                    this.state = 977;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                    if(_la===12 || _la===54) {
	                        this.state = 976;
	                        this.setQuantifier();
	                    }

	                    this.state = 979;
	                    localctx.right = this.queryTerm(3);
	                    break;

	                case 2:
	                    localctx = new SetOperationContext(this, new QueryTermContext(this, _parentctx, _parentState));
	                    localctx.left = _prevctx;
	                    this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_queryTerm);
	                    this.state = 980;
	                    if (!( this.precpred(this._ctx, 1))) {
	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
	                    }
	                    this.state = 981;
	                    localctx.operator = this._input.LT(1);
	                    _la = this._input.LA(1);
	                    if(!(_la===60 || _la===203)) {
	                        localctx.operator = this._errHandler.recoverInline(this);
	                    }
	                    else {
	                    	this._errHandler.reportMatch(this);
	                        this.consume();
	                    }
	                    this.state = 983;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                    if(_la===12 || _la===54) {
	                        this.state = 982;
	                        this.setQuantifier();
	                    }

	                    this.state = 985;
	                    localctx.right = this.queryTerm(2);
	                    break;

	                } 
	            }
	            this.state = 990;
	            this._errHandler.sync(this);
	            _alt = this._interp.adaptivePredict(this._input,120,this._ctx);
	        }

	    } catch( error) {
	        if(error instanceof antlr4.error.RecognitionException) {
		        localctx.exception = error;
		        this._errHandler.reportError(this, error);
		        this._errHandler.recover(this, error);
		    } else {
		    	throw error;
		    }
	    } finally {
	        this.unrollRecursionContexts(_parentctx)
	    }
	    return localctx;
	}



	queryPrimary() {
	    let localctx = new QueryPrimaryContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 50, SqlBaseParser.RULE_queryPrimary);
	    try {
	        this.state = 1007;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 172:
	            localctx = new QueryPrimaryDefaultContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 991;
	            this.querySpecification();
	            break;
	        case 186:
	            localctx = new TableContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 992;
	            this.match(SqlBaseParser.TABLE);
	            this.state = 993;
	            this.qualifiedName();
	            break;
	        case 210:
	            localctx = new InlineTableContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 994;
	            this.match(SqlBaseParser.VALUES);
	            this.state = 995;
	            this.expression();
	            this.state = 1000;
	            this._errHandler.sync(this);
	            var _alt = this._interp.adaptivePredict(this._input,121,this._ctx)
	            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
	                if(_alt===1) {
	                    this.state = 996;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 997;
	                    this.expression(); 
	                }
	                this.state = 1002;
	                this._errHandler.sync(this);
	                _alt = this._interp.adaptivePredict(this._input,121,this._ctx);
	            }

	            break;
	        case 2:
	            localctx = new SubqueryContext(this, localctx);
	            this.enterOuterAlt(localctx, 4);
	            this.state = 1003;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1004;
	            this.queryNoWith();
	            this.state = 1005;
	            this.match(SqlBaseParser.T__2);
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	sortItem() {
	    let localctx = new SortItemContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 52, SqlBaseParser.RULE_sortItem);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1009;
	        this.expression();
	        this.state = 1011;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===19 || _la===51) {
	            this.state = 1010;
	            localctx.ordering = this._input.LT(1);
	            _la = this._input.LA(1);
	            if(!(_la===19 || _la===51)) {
	                localctx.ordering = this._errHandler.recoverInline(this);
	            }
	            else {
	            	this._errHandler.reportMatch(this);
	                this.consume();
	            }
	        }

	        this.state = 1015;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===129) {
	            this.state = 1013;
	            this.match(SqlBaseParser.NULLS);
	            this.state = 1014;
	            localctx.nullOrdering = this._input.LT(1);
	            _la = this._input.LA(1);
	            if(!(_la===70 || _la===104)) {
	                localctx.nullOrdering = this._errHandler.recoverInline(this);
	            }
	            else {
	            	this._errHandler.reportMatch(this);
	                this.consume();
	            }
	        }

	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	querySpecification() {
	    let localctx = new QuerySpecificationContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 54, SqlBaseParser.RULE_querySpecification);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1017;
	        this.match(SqlBaseParser.SELECT);
	        this.state = 1019;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,125,this._ctx);
	        if(la_===1) {
	            this.state = 1018;
	            this.setQuantifier();

	        }
	        this.state = 1021;
	        this.selectItem();
	        this.state = 1026;
	        this._errHandler.sync(this);
	        var _alt = this._interp.adaptivePredict(this._input,126,this._ctx)
	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
	            if(_alt===1) {
	                this.state = 1022;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1023;
	                this.selectItem(); 
	            }
	            this.state = 1028;
	            this._errHandler.sync(this);
	            _alt = this._interp.adaptivePredict(this._input,126,this._ctx);
	        }

	        this.state = 1038;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,128,this._ctx);
	        if(la_===1) {
	            this.state = 1029;
	            this.match(SqlBaseParser.FROM);
	            this.state = 1030;
	            this.relation(0);
	            this.state = 1035;
	            this._errHandler.sync(this);
	            var _alt = this._interp.adaptivePredict(this._input,127,this._ctx)
	            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
	                if(_alt===1) {
	                    this.state = 1031;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 1032;
	                    this.relation(0); 
	                }
	                this.state = 1037;
	                this._errHandler.sync(this);
	                _alt = this._interp.adaptivePredict(this._input,127,this._ctx);
	            }


	        }
	        this.state = 1042;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,129,this._ctx);
	        if(la_===1) {
	            this.state = 1040;
	            this.match(SqlBaseParser.WHERE);
	            this.state = 1041;
	            localctx.where = this.booleanExpression(0);

	        }
	        this.state = 1047;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,130,this._ctx);
	        if(la_===1) {
	            this.state = 1044;
	            this.match(SqlBaseParser.GROUP);
	            this.state = 1045;
	            this.match(SqlBaseParser.BY);
	            this.state = 1046;
	            this.groupBy();

	        }
	        this.state = 1051;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,131,this._ctx);
	        if(la_===1) {
	            this.state = 1049;
	            this.match(SqlBaseParser.HAVING);
	            this.state = 1050;
	            localctx.having = this.booleanExpression(0);

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	groupBy() {
	    let localctx = new GroupByContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 56, SqlBaseParser.RULE_groupBy);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1054;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,132,this._ctx);
	        if(la_===1) {
	            this.state = 1053;
	            this.setQuantifier();

	        }
	        this.state = 1056;
	        this.groupingElement();
	        this.state = 1061;
	        this._errHandler.sync(this);
	        var _alt = this._interp.adaptivePredict(this._input,133,this._ctx)
	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
	            if(_alt===1) {
	                this.state = 1057;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1058;
	                this.groupingElement(); 
	            }
	            this.state = 1063;
	            this._errHandler.sync(this);
	            _alt = this._interp.adaptivePredict(this._input,133,this._ctx);
	        }

	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	groupingElement() {
	    let localctx = new GroupingElementContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 58, SqlBaseParser.RULE_groupingElement);
	    var _la = 0;
	    try {
	        this.state = 1104;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,139,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new SingleGroupingSetContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1064;
	            this.groupingSet();
	            break;

	        case 2:
	            localctx = new RollupContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1065;
	            this.match(SqlBaseParser.ROLLUP);
	            this.state = 1066;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1075;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2695561095) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) {
	                this.state = 1067;
	                this.expression();
	                this.state = 1072;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 1068;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 1069;
	                    this.expression();
	                    this.state = 1074;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            this.state = 1077;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 3:
	            localctx = new CubeContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1078;
	            this.match(SqlBaseParser.CUBE);
	            this.state = 1079;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1088;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2695561095) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) {
	                this.state = 1080;
	                this.expression();
	                this.state = 1085;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 1081;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 1082;
	                    this.expression();
	                    this.state = 1087;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            this.state = 1090;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 4:
	            localctx = new MultipleGroupingSetsContext(this, localctx);
	            this.enterOuterAlt(localctx, 4);
	            this.state = 1091;
	            this.match(SqlBaseParser.GROUPING);
	            this.state = 1092;
	            this.match(SqlBaseParser.SETS);
	            this.state = 1093;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1094;
	            this.groupingSet();
	            this.state = 1099;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 1095;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1096;
	                this.groupingSet();
	                this.state = 1101;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	            this.state = 1102;
	            this.match(SqlBaseParser.T__2);
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	groupingSet() {
	    let localctx = new GroupingSetContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 60, SqlBaseParser.RULE_groupingSet);
	    var _la = 0;
	    try {
	        this.state = 1119;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,142,this._ctx);
	        switch(la_) {
	        case 1:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1106;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1115;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2695561095) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) {
	                this.state = 1107;
	                this.expression();
	                this.state = 1112;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 1108;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 1109;
	                    this.expression();
	                    this.state = 1114;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            this.state = 1117;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 2:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1118;
	            this.expression();
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	namedQuery() {
	    let localctx = new NamedQueryContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 62, SqlBaseParser.RULE_namedQuery);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1121;
	        localctx.name = this.identifier();
	        this.state = 1123;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===2) {
	            this.state = 1122;
	            this.columnAliases();
	        }

	        this.state = 1125;
	        this.match(SqlBaseParser.AS);
	        this.state = 1126;
	        this.match(SqlBaseParser.T__1);
	        this.state = 1127;
	        this.query();
	        this.state = 1128;
	        this.match(SqlBaseParser.T__2);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	setQuantifier() {
	    let localctx = new SetQuantifierContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 64, SqlBaseParser.RULE_setQuantifier);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1130;
	        _la = this._input.LA(1);
	        if(!(_la===12 || _la===54)) {
	        this._errHandler.recoverInline(this);
	        }
	        else {
	        	this._errHandler.reportMatch(this);
	            this.consume();
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	selectItem() {
	    let localctx = new SelectItemContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 66, SqlBaseParser.RULE_selectItem);
	    var _la = 0;
	    try {
	        this.state = 1144;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,146,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new SelectSingleContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1132;
	            this.expression();
	            this.state = 1137;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,145,this._ctx);
	            if(la_===1) {
	                this.state = 1134;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                if(_la===18) {
	                    this.state = 1133;
	                    this.match(SqlBaseParser.AS);
	                }

	                this.state = 1136;
	                this.identifier();

	            }
	            break;

	        case 2:
	            localctx = new SelectAllContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1139;
	            this.qualifiedName();
	            this.state = 1140;
	            this.match(SqlBaseParser.T__0);
	            this.state = 1141;
	            this.match(SqlBaseParser.ASTERISK);
	            break;

	        case 3:
	            localctx = new SelectAllContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1143;
	            this.match(SqlBaseParser.ASTERISK);
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}


	relation(_p) {
		if(_p===undefined) {
		    _p = 0;
		}
	    const _parentctx = this._ctx;
	    const _parentState = this.state;
	    let localctx = new RelationContext(this, this._ctx, _parentState);
	    let _prevctx = localctx;
	    const _startState = 68;
	    this.enterRecursionRule(localctx, 68, SqlBaseParser.RULE_relation, _p);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        localctx = new RelationDefaultContext(this, localctx);
	        this._ctx = localctx;
	        _prevctx = localctx;

	        this.state = 1147;
	        this.sampledRelation();
	        this._ctx.stop = this._input.LT(-1);
	        this.state = 1167;
	        this._errHandler.sync(this);
	        var _alt = this._interp.adaptivePredict(this._input,148,this._ctx)
	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
	            if(_alt===1) {
	                if(this._parseListeners!==null) {
	                    this.triggerExitRuleEvent();
	                }
	                _prevctx = localctx;
	                localctx = new JoinRelationContext(this, new RelationContext(this, _parentctx, _parentState));
	                localctx.left = _prevctx;
	                this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_relation);
	                this.state = 1149;
	                if (!( this.precpred(this._ctx, 2))) {
	                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
	                }
	                this.state = 1163;
	                this._errHandler.sync(this);
	                switch(this._input.LA(1)) {
	                case 37:
	                    this.state = 1150;
	                    this.match(SqlBaseParser.CROSS);
	                    this.state = 1151;
	                    this.match(SqlBaseParser.JOIN);
	                    this.state = 1152;
	                    localctx.right = this.sampledRelation();
	                    break;
	                case 75:
	                case 91:
	                case 102:
	                case 106:
	                case 161:
	                    this.state = 1153;
	                    this.joinType();
	                    this.state = 1154;
	                    this.match(SqlBaseParser.JOIN);
	                    this.state = 1155;
	                    localctx.rightRelation = this.relation(0);
	                    this.state = 1156;
	                    this.joinCriteria();
	                    break;
	                case 118:
	                    this.state = 1158;
	                    this.match(SqlBaseParser.NATURAL);
	                    this.state = 1159;
	                    this.joinType();
	                    this.state = 1160;
	                    this.match(SqlBaseParser.JOIN);
	                    this.state = 1161;
	                    localctx.right = this.sampledRelation();
	                    break;
	                default:
	                    throw new antlr4.error.NoViableAltException(this);
	                } 
	            }
	            this.state = 1169;
	            this._errHandler.sync(this);
	            _alt = this._interp.adaptivePredict(this._input,148,this._ctx);
	        }

	    } catch( error) {
	        if(error instanceof antlr4.error.RecognitionException) {
		        localctx.exception = error;
		        this._errHandler.reportError(this, error);
		        this._errHandler.recover(this, error);
		    } else {
		    	throw error;
		    }
	    } finally {
	        this.unrollRecursionContexts(_parentctx)
	    }
	    return localctx;
	}



	joinType() {
	    let localctx = new JoinTypeContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 70, SqlBaseParser.RULE_joinType);
	    var _la = 0;
	    try {
	        this.state = 1185;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 91:
	        case 102:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1171;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===91) {
	                this.state = 1170;
	                this.match(SqlBaseParser.INNER);
	            }

	            break;
	        case 106:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1173;
	            this.match(SqlBaseParser.LEFT);
	            this.state = 1175;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===138) {
	                this.state = 1174;
	                this.match(SqlBaseParser.OUTER);
	            }

	            break;
	        case 161:
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1177;
	            this.match(SqlBaseParser.RIGHT);
	            this.state = 1179;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===138) {
	                this.state = 1178;
	                this.match(SqlBaseParser.OUTER);
	            }

	            break;
	        case 75:
	            this.enterOuterAlt(localctx, 4);
	            this.state = 1181;
	            this.match(SqlBaseParser.FULL);
	            this.state = 1183;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===138) {
	                this.state = 1182;
	                this.match(SqlBaseParser.OUTER);
	            }

	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	joinCriteria() {
	    let localctx = new JoinCriteriaContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 72, SqlBaseParser.RULE_joinCriteria);
	    var _la = 0;
	    try {
	        this.state = 1201;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 132:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1187;
	            this.match(SqlBaseParser.ON);
	            this.state = 1188;
	            this.booleanExpression(0);
	            break;
	        case 208:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1189;
	            this.match(SqlBaseParser.USING);
	            this.state = 1190;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1191;
	            this.identifier();
	            this.state = 1196;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 1192;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1193;
	                this.identifier();
	                this.state = 1198;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	            this.state = 1199;
	            this.match(SqlBaseParser.T__2);
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	sampledRelation() {
	    let localctx = new SampledRelationContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 74, SqlBaseParser.RULE_sampledRelation);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1203;
	        this.aliasedRelation();
	        this.state = 1210;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,156,this._ctx);
	        if(la_===1) {
	            this.state = 1204;
	            this.match(SqlBaseParser.TABLESAMPLE);
	            this.state = 1205;
	            this.sampleType();
	            this.state = 1206;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1207;
	            localctx.percentage = this.expression();
	            this.state = 1208;
	            this.match(SqlBaseParser.T__2);

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	sampleType() {
	    let localctx = new SampleTypeContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 76, SqlBaseParser.RULE_sampleType);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1212;
	        _la = this._input.LA(1);
	        if(!(_la===21 || _la===183)) {
	        this._errHandler.recoverInline(this);
	        }
	        else {
	        	this._errHandler.reportMatch(this);
	            this.consume();
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	aliasedRelation() {
	    let localctx = new AliasedRelationContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 78, SqlBaseParser.RULE_aliasedRelation);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1214;
	        this.relationPrimary();
	        this.state = 1222;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,159,this._ctx);
	        if(la_===1) {
	            this.state = 1216;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===18) {
	                this.state = 1215;
	                this.match(SqlBaseParser.AS);
	            }

	            this.state = 1218;
	            this.identifier();
	            this.state = 1220;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,158,this._ctx);
	            if(la_===1) {
	                this.state = 1219;
	                this.columnAliases();

	            }

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	columnAliases() {
	    let localctx = new ColumnAliasesContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 80, SqlBaseParser.RULE_columnAliases);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1224;
	        this.match(SqlBaseParser.T__1);
	        this.state = 1225;
	        this.identifier();
	        this.state = 1230;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        while(_la===4) {
	            this.state = 1226;
	            this.match(SqlBaseParser.T__3);
	            this.state = 1227;
	            this.identifier();
	            this.state = 1232;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	        }
	        this.state = 1233;
	        this.match(SqlBaseParser.T__2);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	relationPrimary() {
	    let localctx = new RelationPrimaryContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 82, SqlBaseParser.RULE_relationPrimary);
	    var _la = 0;
	    try {
	        this.state = 1267;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,164,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new TableNameContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1235;
	            this.qualifiedName();
	            this.state = 1237;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,161,this._ctx);
	            if(la_===1) {
	                this.state = 1236;
	                this.tableVersionExpression();

	            }
	            break;

	        case 2:
	            localctx = new SubqueryRelationContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1239;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1240;
	            this.query();
	            this.state = 1241;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 3:
	            localctx = new UnnestContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1243;
	            this.match(SqlBaseParser.UNNEST);
	            this.state = 1244;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1245;
	            this.expression();
	            this.state = 1250;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 1246;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1247;
	                this.expression();
	                this.state = 1252;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	            this.state = 1253;
	            this.match(SqlBaseParser.T__2);
	            this.state = 1256;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,163,this._ctx);
	            if(la_===1) {
	                this.state = 1254;
	                this.match(SqlBaseParser.WITH);
	                this.state = 1255;
	                this.match(SqlBaseParser.ORDINALITY);

	            }
	            break;

	        case 4:
	            localctx = new LateralContext(this, localctx);
	            this.enterOuterAlt(localctx, 4);
	            this.state = 1258;
	            this.match(SqlBaseParser.LATERAL);
	            this.state = 1259;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1260;
	            this.query();
	            this.state = 1261;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 5:
	            localctx = new ParenthesizedRelationContext(this, localctx);
	            this.enterOuterAlt(localctx, 5);
	            this.state = 1263;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1264;
	            this.relation(0);
	            this.state = 1265;
	            this.match(SqlBaseParser.T__2);
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	expression() {
	    let localctx = new ExpressionContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 84, SqlBaseParser.RULE_expression);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1269;
	        this.booleanExpression(0);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}


	booleanExpression(_p) {
		if(_p===undefined) {
		    _p = 0;
		}
	    const _parentctx = this._ctx;
	    const _parentState = this.state;
	    let localctx = new BooleanExpressionContext(this, this._ctx, _parentState);
	    let _prevctx = localctx;
	    const _startState = 86;
	    this.enterRecursionRule(localctx, 86, SqlBaseParser.RULE_booleanExpression, _p);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1278;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 2:
	        case 5:
	        case 10:
	        case 11:
	        case 12:
	        case 14:
	        case 16:
	        case 17:
	        case 19:
	        case 20:
	        case 21:
	        case 24:
	        case 25:
	        case 26:
	        case 27:
	        case 28:
	        case 29:
	        case 30:
	        case 31:
	        case 32:
	        case 33:
	        case 34:
	        case 39:
	        case 40:
	        case 41:
	        case 42:
	        case 43:
	        case 44:
	        case 45:
	        case 46:
	        case 47:
	        case 49:
	        case 51:
	        case 53:
	        case 55:
	        case 61:
	        case 63:
	        case 64:
	        case 65:
	        case 66:
	        case 67:
	        case 68:
	        case 69:
	        case 70:
	        case 71:
	        case 73:
	        case 76:
	        case 77:
	        case 78:
	        case 79:
	        case 80:
	        case 81:
	        case 83:
	        case 84:
	        case 86:
	        case 87:
	        case 88:
	        case 90:
	        case 92:
	        case 95:
	        case 97:
	        case 98:
	        case 100:
	        case 101:
	        case 103:
	        case 104:
	        case 105:
	        case 107:
	        case 109:
	        case 110:
	        case 111:
	        case 112:
	        case 113:
	        case 114:
	        case 115:
	        case 116:
	        case 117:
	        case 119:
	        case 120:
	        case 121:
	        case 122:
	        case 123:
	        case 124:
	        case 125:
	        case 127:
	        case 128:
	        case 129:
	        case 130:
	        case 131:
	        case 133:
	        case 134:
	        case 137:
	        case 139:
	        case 140:
	        case 141:
	        case 142:
	        case 143:
	        case 144:
	        case 146:
	        case 147:
	        case 148:
	        case 149:
	        case 151:
	        case 152:
	        case 153:
	        case 154:
	        case 155:
	        case 156:
	        case 157:
	        case 158:
	        case 159:
	        case 160:
	        case 162:
	        case 163:
	        case 164:
	        case 166:
	        case 167:
	        case 168:
	        case 169:
	        case 170:
	        case 171:
	        case 173:
	        case 174:
	        case 175:
	        case 176:
	        case 177:
	        case 178:
	        case 179:
	        case 180:
	        case 181:
	        case 182:
	        case 183:
	        case 184:
	        case 185:
	        case 187:
	        case 188:
	        case 189:
	        case 190:
	        case 192:
	        case 193:
	        case 194:
	        case 195:
	        case 196:
	        case 197:
	        case 198:
	        case 199:
	        case 201:
	        case 202:
	        case 205:
	        case 206:
	        case 207:
	        case 209:
	        case 211:
	        case 212:
	        case 213:
	        case 217:
	        case 218:
	        case 219:
	        case 220:
	        case 227:
	        case 228:
	        case 233:
	        case 234:
	        case 235:
	        case 236:
	        case 237:
	        case 238:
	        case 239:
	        case 240:
	        case 241:
	        case 242:
	        case 245:
	            localctx = new PredicatedContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;

	            this.state = 1272;
	            localctx._valueExpression = this.valueExpression(0);
	            this.state = 1274;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,165,this._ctx);
	            if(la_===1) {
	                this.state = 1273;
	                this.predicate(localctx._valueExpression);

	            }
	            break;
	        case 126:
	            localctx = new LogicalNotContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1276;
	            this.match(SqlBaseParser.NOT);
	            this.state = 1277;
	            this.booleanExpression(3);
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	        this._ctx.stop = this._input.LT(-1);
	        this.state = 1288;
	        this._errHandler.sync(this);
	        var _alt = this._interp.adaptivePredict(this._input,168,this._ctx)
	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
	            if(_alt===1) {
	                if(this._parseListeners!==null) {
	                    this.triggerExitRuleEvent();
	                }
	                _prevctx = localctx;
	                this.state = 1286;
	                this._errHandler.sync(this);
	                var la_ = this._interp.adaptivePredict(this._input,167,this._ctx);
	                switch(la_) {
	                case 1:
	                    localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState));
	                    localctx.left = _prevctx;
	                    this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_booleanExpression);
	                    this.state = 1280;
	                    if (!( this.precpred(this._ctx, 2))) {
	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
	                    }
	                    this.state = 1281;
	                    localctx.operator = this.match(SqlBaseParser.AND);
	                    this.state = 1282;
	                    localctx.right = this.booleanExpression(3);
	                    break;

	                case 2:
	                    localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState));
	                    localctx.left = _prevctx;
	                    this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_booleanExpression);
	                    this.state = 1283;
	                    if (!( this.precpred(this._ctx, 1))) {
	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
	                    }
	                    this.state = 1284;
	                    localctx.operator = this.match(SqlBaseParser.OR);
	                    this.state = 1285;
	                    localctx.right = this.booleanExpression(2);
	                    break;

	                } 
	            }
	            this.state = 1290;
	            this._errHandler.sync(this);
	            _alt = this._interp.adaptivePredict(this._input,168,this._ctx);
	        }

	    } catch( error) {
	        if(error instanceof antlr4.error.RecognitionException) {
		        localctx.exception = error;
		        this._errHandler.reportError(this, error);
		        this._errHandler.recover(this, error);
		    } else {
		    	throw error;
		    }
	    } finally {
	        this.unrollRecursionContexts(_parentctx)
	    }
	    return localctx;
	}



	predicate(value) {
	    let localctx = new PredicateContext(this, this._ctx, this.state, value);
	    this.enterRule(localctx, 88, SqlBaseParser.RULE_predicate);
	    var _la = 0;
	    try {
	        this.state = 1352;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,177,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new ComparisonContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1291;
	            this.comparisonOperator();
	            this.state = 1292;
	            localctx.right = this.valueExpression(0);
	            break;

	        case 2:
	            localctx = new QuantifiedComparisonContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1294;
	            this.comparisonOperator();
	            this.state = 1295;
	            this.comparisonQuantifier();
	            this.state = 1296;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1297;
	            this.query();
	            this.state = 1298;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 3:
	            localctx = new BetweenContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1301;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===126) {
	                this.state = 1300;
	                this.match(SqlBaseParser.NOT);
	            }

	            this.state = 1303;
	            this.match(SqlBaseParser.BETWEEN);
	            this.state = 1304;
	            localctx.lower = this.valueExpression(0);
	            this.state = 1305;
	            this.match(SqlBaseParser.AND);
	            this.state = 1306;
	            localctx.upper = this.valueExpression(0);
	            break;

	        case 4:
	            localctx = new InListContext(this, localctx);
	            this.enterOuterAlt(localctx, 4);
	            this.state = 1309;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===126) {
	                this.state = 1308;
	                this.match(SqlBaseParser.NOT);
	            }

	            this.state = 1311;
	            this.match(SqlBaseParser.IN);
	            this.state = 1312;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1313;
	            this.expression();
	            this.state = 1318;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 1314;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1315;
	                this.expression();
	                this.state = 1320;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	            this.state = 1321;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 5:
	            localctx = new InSubqueryContext(this, localctx);
	            this.enterOuterAlt(localctx, 5);
	            this.state = 1324;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===126) {
	                this.state = 1323;
	                this.match(SqlBaseParser.NOT);
	            }

	            this.state = 1326;
	            this.match(SqlBaseParser.IN);
	            this.state = 1327;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1328;
	            this.query();
	            this.state = 1329;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 6:
	            localctx = new LikeContext(this, localctx);
	            this.enterOuterAlt(localctx, 6);
	            this.state = 1332;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===126) {
	                this.state = 1331;
	                this.match(SqlBaseParser.NOT);
	            }

	            this.state = 1334;
	            this.match(SqlBaseParser.LIKE);
	            this.state = 1335;
	            localctx.pattern = this.valueExpression(0);
	            this.state = 1338;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,174,this._ctx);
	            if(la_===1) {
	                this.state = 1336;
	                this.match(SqlBaseParser.ESCAPE);
	                this.state = 1337;
	                localctx.escape = this.valueExpression(0);

	            }
	            break;

	        case 7:
	            localctx = new NullPredicateContext(this, localctx);
	            this.enterOuterAlt(localctx, 7);
	            this.state = 1340;
	            this.match(SqlBaseParser.IS);
	            this.state = 1342;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===126) {
	                this.state = 1341;
	                this.match(SqlBaseParser.NOT);
	            }

	            this.state = 1344;
	            this.match(SqlBaseParser.NULL);
	            break;

	        case 8:
	            localctx = new DistinctFromContext(this, localctx);
	            this.enterOuterAlt(localctx, 8);
	            this.state = 1345;
	            this.match(SqlBaseParser.IS);
	            this.state = 1347;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===126) {
	                this.state = 1346;
	                this.match(SqlBaseParser.NOT);
	            }

	            this.state = 1349;
	            this.match(SqlBaseParser.DISTINCT);
	            this.state = 1350;
	            this.match(SqlBaseParser.FROM);
	            this.state = 1351;
	            localctx.right = this.valueExpression(0);
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}


	valueExpression(_p) {
		if(_p===undefined) {
		    _p = 0;
		}
	    const _parentctx = this._ctx;
	    const _parentState = this.state;
	    let localctx = new ValueExpressionContext(this, this._ctx, _parentState);
	    let _prevctx = localctx;
	    const _startState = 90;
	    this.enterRecursionRule(localctx, 90, SqlBaseParser.RULE_valueExpression, _p);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1358;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 2:
	        case 5:
	        case 10:
	        case 11:
	        case 12:
	        case 14:
	        case 16:
	        case 17:
	        case 19:
	        case 20:
	        case 21:
	        case 24:
	        case 25:
	        case 26:
	        case 27:
	        case 28:
	        case 29:
	        case 30:
	        case 31:
	        case 32:
	        case 33:
	        case 34:
	        case 39:
	        case 40:
	        case 41:
	        case 42:
	        case 43:
	        case 44:
	        case 45:
	        case 46:
	        case 47:
	        case 49:
	        case 51:
	        case 53:
	        case 55:
	        case 61:
	        case 63:
	        case 64:
	        case 65:
	        case 66:
	        case 67:
	        case 68:
	        case 69:
	        case 70:
	        case 71:
	        case 73:
	        case 76:
	        case 77:
	        case 78:
	        case 79:
	        case 80:
	        case 81:
	        case 83:
	        case 84:
	        case 86:
	        case 87:
	        case 88:
	        case 90:
	        case 92:
	        case 95:
	        case 97:
	        case 98:
	        case 100:
	        case 101:
	        case 103:
	        case 104:
	        case 105:
	        case 107:
	        case 109:
	        case 110:
	        case 111:
	        case 112:
	        case 113:
	        case 114:
	        case 115:
	        case 116:
	        case 117:
	        case 119:
	        case 120:
	        case 121:
	        case 122:
	        case 123:
	        case 124:
	        case 125:
	        case 127:
	        case 128:
	        case 129:
	        case 130:
	        case 131:
	        case 133:
	        case 134:
	        case 137:
	        case 139:
	        case 140:
	        case 141:
	        case 142:
	        case 143:
	        case 144:
	        case 146:
	        case 147:
	        case 148:
	        case 149:
	        case 151:
	        case 152:
	        case 153:
	        case 154:
	        case 155:
	        case 156:
	        case 157:
	        case 158:
	        case 159:
	        case 160:
	        case 162:
	        case 163:
	        case 164:
	        case 166:
	        case 167:
	        case 168:
	        case 169:
	        case 170:
	        case 171:
	        case 173:
	        case 174:
	        case 175:
	        case 176:
	        case 177:
	        case 178:
	        case 179:
	        case 180:
	        case 181:
	        case 182:
	        case 183:
	        case 184:
	        case 185:
	        case 187:
	        case 188:
	        case 189:
	        case 190:
	        case 192:
	        case 193:
	        case 194:
	        case 195:
	        case 196:
	        case 197:
	        case 198:
	        case 199:
	        case 201:
	        case 202:
	        case 205:
	        case 206:
	        case 207:
	        case 209:
	        case 211:
	        case 212:
	        case 213:
	        case 217:
	        case 218:
	        case 219:
	        case 220:
	        case 233:
	        case 234:
	        case 235:
	        case 236:
	        case 237:
	        case 238:
	        case 239:
	        case 240:
	        case 241:
	        case 242:
	        case 245:
	            localctx = new ValueExpressionDefaultContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;

	            this.state = 1355;
	            this.primaryExpression(0);
	            break;
	        case 227:
	        case 228:
	            localctx = new ArithmeticUnaryContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1356;
	            localctx.operator = this._input.LT(1);
	            _la = this._input.LA(1);
	            if(!(_la===227 || _la===228)) {
	                localctx.operator = this._errHandler.recoverInline(this);
	            }
	            else {
	            	this._errHandler.reportMatch(this);
	                this.consume();
	            }
	            this.state = 1357;
	            this.valueExpression(4);
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	        this._ctx.stop = this._input.LT(-1);
	        this.state = 1374;
	        this._errHandler.sync(this);
	        var _alt = this._interp.adaptivePredict(this._input,180,this._ctx)
	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
	            if(_alt===1) {
	                if(this._parseListeners!==null) {
	                    this.triggerExitRuleEvent();
	                }
	                _prevctx = localctx;
	                this.state = 1372;
	                this._errHandler.sync(this);
	                var la_ = this._interp.adaptivePredict(this._input,179,this._ctx);
	                switch(la_) {
	                case 1:
	                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
	                    localctx.left = _prevctx;
	                    this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_valueExpression);
	                    this.state = 1360;
	                    if (!( this.precpred(this._ctx, 3))) {
	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
	                    }
	                    this.state = 1361;
	                    localctx.operator = this._input.LT(1);
	                    _la = this._input.LA(1);
	                    if(!(((((_la - 229)) & ~0x1f) === 0 && ((1 << (_la - 229)) & 7) !== 0))) {
	                        localctx.operator = this._errHandler.recoverInline(this);
	                    }
	                    else {
	                    	this._errHandler.reportMatch(this);
	                        this.consume();
	                    }
	                    this.state = 1362;
	                    localctx.right = this.valueExpression(4);
	                    break;

	                case 2:
	                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
	                    localctx.left = _prevctx;
	                    this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_valueExpression);
	                    this.state = 1363;
	                    if (!( this.precpred(this._ctx, 2))) {
	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
	                    }
	                    this.state = 1364;
	                    localctx.operator = this._input.LT(1);
	                    _la = this._input.LA(1);
	                    if(!(_la===227 || _la===228)) {
	                        localctx.operator = this._errHandler.recoverInline(this);
	                    }
	                    else {
	                    	this._errHandler.reportMatch(this);
	                        this.consume();
	                    }
	                    this.state = 1365;
	                    localctx.right = this.valueExpression(3);
	                    break;

	                case 3:
	                    localctx = new ConcatenationContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
	                    localctx.left = _prevctx;
	                    this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_valueExpression);
	                    this.state = 1366;
	                    if (!( this.precpred(this._ctx, 1))) {
	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
	                    }
	                    this.state = 1367;
	                    this.match(SqlBaseParser.CONCAT);
	                    this.state = 1368;
	                    localctx.right = this.valueExpression(2);
	                    break;

	                case 4:
	                    localctx = new AtTimeZoneContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
	                    this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_valueExpression);
	                    this.state = 1369;
	                    if (!( this.precpred(this._ctx, 5))) {
	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
	                    }
	                    this.state = 1370;
	                    this.match(SqlBaseParser.AT);
	                    this.state = 1371;
	                    this.timeZoneSpecifier();
	                    break;

	                } 
	            }
	            this.state = 1376;
	            this._errHandler.sync(this);
	            _alt = this._interp.adaptivePredict(this._input,180,this._ctx);
	        }

	    } catch( error) {
	        if(error instanceof antlr4.error.RecognitionException) {
		        localctx.exception = error;
		        this._errHandler.reportError(this, error);
		        this._errHandler.recover(this, error);
		    } else {
		    	throw error;
		    }
	    } finally {
	        this.unrollRecursionContexts(_parentctx)
	    }
	    return localctx;
	}


	primaryExpression(_p) {
		if(_p===undefined) {
		    _p = 0;
		}
	    const _parentctx = this._ctx;
	    const _parentState = this.state;
	    let localctx = new PrimaryExpressionContext(this, this._ctx, _parentState);
	    let _prevctx = localctx;
	    const _startState = 92;
	    this.enterRecursionRule(localctx, 92, SqlBaseParser.RULE_primaryExpression, _p);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1616;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,209,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new NullLiteralContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;

	            this.state = 1378;
	            this.match(SqlBaseParser.NULL);
	            break;

	        case 2:
	            localctx = new IntervalLiteralContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1379;
	            this.interval();
	            break;

	        case 3:
	            localctx = new TypeConstructorContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1380;
	            this.identifier();
	            this.state = 1381;
	            this.string();
	            break;

	        case 4:
	            localctx = new TypeConstructorContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1383;
	            this.match(SqlBaseParser.DOUBLE_PRECISION);
	            this.state = 1384;
	            this.string();
	            break;

	        case 5:
	            localctx = new NumericLiteralContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1385;
	            this.number();
	            break;

	        case 6:
	            localctx = new BooleanLiteralContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1386;
	            this.booleanValue();
	            break;

	        case 7:
	            localctx = new StringLiteralContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1387;
	            this.string();
	            break;

	        case 8:
	            localctx = new BinaryLiteralContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1388;
	            this.match(SqlBaseParser.BINARY_LITERAL);
	            break;

	        case 9:
	            localctx = new ParameterContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1389;
	            this.match(SqlBaseParser.T__4);
	            break;

	        case 10:
	            localctx = new PositionContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1390;
	            this.match(SqlBaseParser.POSITION);
	            this.state = 1391;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1392;
	            this.valueExpression(0);
	            this.state = 1393;
	            this.match(SqlBaseParser.IN);
	            this.state = 1394;
	            this.valueExpression(0);
	            this.state = 1395;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 11:
	            localctx = new RowConstructorContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1397;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1398;
	            this.expression();
	            this.state = 1401; 
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            do {
	                this.state = 1399;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1400;
	                this.expression();
	                this.state = 1403; 
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            } while(_la===4);
	            this.state = 1405;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 12:
	            localctx = new RowConstructorContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1407;
	            this.match(SqlBaseParser.ROW);
	            this.state = 1408;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1409;
	            this.expression();
	            this.state = 1414;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 1410;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1411;
	                this.expression();
	                this.state = 1416;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	            this.state = 1417;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 13:
	            localctx = new FunctionCallContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1419;
	            this.qualifiedName();
	            this.state = 1420;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1421;
	            this.match(SqlBaseParser.ASTERISK);
	            this.state = 1422;
	            this.match(SqlBaseParser.T__2);
	            this.state = 1424;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,183,this._ctx);
	            if(la_===1) {
	                this.state = 1423;
	                this.filter();

	            }
	            this.state = 1427;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,184,this._ctx);
	            if(la_===1) {
	                this.state = 1426;
	                this.over();

	            }
	            break;

	        case 14:
	            localctx = new FunctionCallContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1429;
	            this.qualifiedName();
	            this.state = 1430;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1442;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2699755399) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) {
	                this.state = 1432;
	                this._errHandler.sync(this);
	                var la_ = this._interp.adaptivePredict(this._input,185,this._ctx);
	                if(la_===1) {
	                    this.state = 1431;
	                    this.setQuantifier();

	                }
	                this.state = 1434;
	                this.expression();
	                this.state = 1439;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 1435;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 1436;
	                    this.expression();
	                    this.state = 1441;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            this.state = 1454;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===136) {
	                this.state = 1444;
	                this.match(SqlBaseParser.ORDER);
	                this.state = 1445;
	                this.match(SqlBaseParser.BY);
	                this.state = 1446;
	                this.sortItem();
	                this.state = 1451;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 1447;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 1448;
	                    this.sortItem();
	                    this.state = 1453;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            this.state = 1456;
	            this.match(SqlBaseParser.T__2);
	            this.state = 1458;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,190,this._ctx);
	            if(la_===1) {
	                this.state = 1457;
	                this.filter();

	            }
	            this.state = 1464;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,192,this._ctx);
	            if(la_===1) {
	                this.state = 1461;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                if(_la===88 || _la===156) {
	                    this.state = 1460;
	                    this.nullTreatment();
	                }

	                this.state = 1463;
	                this.over();

	            }
	            break;

	        case 15:
	            localctx = new LambdaContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1466;
	            this.identifier();
	            this.state = 1467;
	            this.match(SqlBaseParser.T__5);
	            this.state = 1468;
	            this.expression();
	            break;

	        case 16:
	            localctx = new LambdaContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1470;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1479;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if((((_la) & ~0x1f) === 0 && ((1 << _la) & 3879427072) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 548070023) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2513695477) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 2413794779) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794171) !== 0) || ((((_la - 239)) & ~0x1f) === 0 && ((1 << (_la - 239)) & 15) !== 0)) {
	                this.state = 1471;
	                this.identifier();
	                this.state = 1476;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 1472;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 1473;
	                    this.identifier();
	                    this.state = 1478;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            this.state = 1481;
	            this.match(SqlBaseParser.T__2);
	            this.state = 1482;
	            this.match(SqlBaseParser.T__5);
	            this.state = 1483;
	            this.expression();
	            break;

	        case 17:
	            localctx = new SubqueryExpressionContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1484;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1485;
	            this.query();
	            this.state = 1486;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 18:
	            localctx = new ExistsContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1488;
	            this.match(SqlBaseParser.EXISTS);
	            this.state = 1489;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1490;
	            this.query();
	            this.state = 1491;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 19:
	            localctx = new SimpleCaseContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1493;
	            this.match(SqlBaseParser.CASE);
	            this.state = 1494;
	            this.valueExpression(0);
	            this.state = 1496; 
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            do {
	                this.state = 1495;
	                this.whenClause();
	                this.state = 1498; 
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            } while(_la===214);
	            this.state = 1502;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===57) {
	                this.state = 1500;
	                this.match(SqlBaseParser.ELSE);
	                this.state = 1501;
	                localctx.elseExpression = this.expression();
	            }

	            this.state = 1504;
	            this.match(SqlBaseParser.END);
	            break;

	        case 20:
	            localctx = new SearchedCaseContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1506;
	            this.match(SqlBaseParser.CASE);
	            this.state = 1508; 
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            do {
	                this.state = 1507;
	                this.whenClause();
	                this.state = 1510; 
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            } while(_la===214);
	            this.state = 1514;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===57) {
	                this.state = 1512;
	                this.match(SqlBaseParser.ELSE);
	                this.state = 1513;
	                localctx.elseExpression = this.expression();
	            }

	            this.state = 1516;
	            this.match(SqlBaseParser.END);
	            break;

	        case 21:
	            localctx = new CastContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1518;
	            this.match(SqlBaseParser.CAST);
	            this.state = 1519;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1520;
	            this.expression();
	            this.state = 1521;
	            this.match(SqlBaseParser.AS);
	            this.state = 1522;
	            this.type(0);
	            this.state = 1523;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 22:
	            localctx = new CastContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1525;
	            this.match(SqlBaseParser.TRY_CAST);
	            this.state = 1526;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1527;
	            this.expression();
	            this.state = 1528;
	            this.match(SqlBaseParser.AS);
	            this.state = 1529;
	            this.type(0);
	            this.state = 1530;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 23:
	            localctx = new ArrayConstructorContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1532;
	            this.match(SqlBaseParser.ARRAY);
	            this.state = 1533;
	            this.match(SqlBaseParser.T__6);
	            this.state = 1542;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if((((_la) & ~0x1f) === 0 && ((1 << _la) & 4282080292) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 2695561095) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2514219775) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 4292867547) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794175) !== 0) || ((((_la - 227)) & ~0x1f) === 0 && ((1 << (_la - 227)) & 327619) !== 0)) {
	                this.state = 1534;
	                this.expression();
	                this.state = 1539;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 1535;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 1536;
	                    this.expression();
	                    this.state = 1541;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            this.state = 1544;
	            this.match(SqlBaseParser.T__7);
	            break;

	        case 24:
	            localctx = new ColumnReferenceContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1545;
	            this.identifier();
	            break;

	        case 25:
	            localctx = new SpecialDateTimeFunctionContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1546;
	            localctx.name = this.match(SqlBaseParser.CURRENT_DATE);
	            break;

	        case 26:
	            localctx = new SpecialDateTimeFunctionContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1547;
	            localctx.name = this.match(SqlBaseParser.CURRENT_TIME);
	            this.state = 1551;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,201,this._ctx);
	            if(la_===1) {
	                this.state = 1548;
	                this.match(SqlBaseParser.T__1);
	                this.state = 1549;
	                localctx.precision = this.match(SqlBaseParser.INTEGER_VALUE);
	                this.state = 1550;
	                this.match(SqlBaseParser.T__2);

	            }
	            break;

	        case 27:
	            localctx = new SpecialDateTimeFunctionContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1553;
	            localctx.name = this.match(SqlBaseParser.CURRENT_TIMESTAMP);
	            this.state = 1557;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,202,this._ctx);
	            if(la_===1) {
	                this.state = 1554;
	                this.match(SqlBaseParser.T__1);
	                this.state = 1555;
	                localctx.precision = this.match(SqlBaseParser.INTEGER_VALUE);
	                this.state = 1556;
	                this.match(SqlBaseParser.T__2);

	            }
	            break;

	        case 28:
	            localctx = new SpecialDateTimeFunctionContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1559;
	            localctx.name = this.match(SqlBaseParser.LOCALTIME);
	            this.state = 1563;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,203,this._ctx);
	            if(la_===1) {
	                this.state = 1560;
	                this.match(SqlBaseParser.T__1);
	                this.state = 1561;
	                localctx.precision = this.match(SqlBaseParser.INTEGER_VALUE);
	                this.state = 1562;
	                this.match(SqlBaseParser.T__2);

	            }
	            break;

	        case 29:
	            localctx = new SpecialDateTimeFunctionContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1565;
	            localctx.name = this.match(SqlBaseParser.LOCALTIMESTAMP);
	            this.state = 1569;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,204,this._ctx);
	            if(la_===1) {
	                this.state = 1566;
	                this.match(SqlBaseParser.T__1);
	                this.state = 1567;
	                localctx.precision = this.match(SqlBaseParser.INTEGER_VALUE);
	                this.state = 1568;
	                this.match(SqlBaseParser.T__2);

	            }
	            break;

	        case 30:
	            localctx = new CurrentUserContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1571;
	            localctx.name = this.match(SqlBaseParser.CURRENT_USER);
	            break;

	        case 31:
	            localctx = new SubstringContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1572;
	            this.match(SqlBaseParser.SUBSTRING);
	            this.state = 1573;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1574;
	            this.valueExpression(0);
	            this.state = 1575;
	            this.match(SqlBaseParser.FROM);
	            this.state = 1576;
	            this.valueExpression(0);
	            this.state = 1579;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===72) {
	                this.state = 1577;
	                this.match(SqlBaseParser.FOR);
	                this.state = 1578;
	                this.valueExpression(0);
	            }

	            this.state = 1581;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 32:
	            localctx = new NormalizeContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1583;
	            this.match(SqlBaseParser.NORMALIZE);
	            this.state = 1584;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1585;
	            this.valueExpression(0);
	            this.state = 1588;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if(_la===4) {
	                this.state = 1586;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1587;
	                this.normalForm();
	            }

	            this.state = 1590;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 33:
	            localctx = new ExtractContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1592;
	            this.match(SqlBaseParser.EXTRACT);
	            this.state = 1593;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1594;
	            this.identifier();
	            this.state = 1595;
	            this.match(SqlBaseParser.FROM);
	            this.state = 1596;
	            this.valueExpression(0);
	            this.state = 1597;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 34:
	            localctx = new ParenthesizedExpressionContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1599;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1600;
	            this.expression();
	            this.state = 1601;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 35:
	            localctx = new GroupingOperationContext(this, localctx);
	            this._ctx = localctx;
	            _prevctx = localctx;
	            this.state = 1603;
	            this.match(SqlBaseParser.GROUPING);
	            this.state = 1604;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1613;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            if((((_la) & ~0x1f) === 0 && ((1 << _la) & 3879427072) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 548070023) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2513695477) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 2413794779) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794171) !== 0) || ((((_la - 239)) & ~0x1f) === 0 && ((1 << (_la - 239)) & 15) !== 0)) {
	                this.state = 1605;
	                this.qualifiedName();
	                this.state = 1610;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 1606;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 1607;
	                    this.qualifiedName();
	                    this.state = 1612;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	            }

	            this.state = 1615;
	            this.match(SqlBaseParser.T__2);
	            break;

	        }
	        this._ctx.stop = this._input.LT(-1);
	        this.state = 1628;
	        this._errHandler.sync(this);
	        var _alt = this._interp.adaptivePredict(this._input,211,this._ctx)
	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
	            if(_alt===1) {
	                if(this._parseListeners!==null) {
	                    this.triggerExitRuleEvent();
	                }
	                _prevctx = localctx;
	                this.state = 1626;
	                this._errHandler.sync(this);
	                var la_ = this._interp.adaptivePredict(this._input,210,this._ctx);
	                switch(la_) {
	                case 1:
	                    localctx = new SubscriptContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState));
	                    localctx.value = _prevctx;
	                    this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_primaryExpression);
	                    this.state = 1618;
	                    if (!( this.precpred(this._ctx, 14))) {
	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 14)");
	                    }
	                    this.state = 1619;
	                    this.match(SqlBaseParser.T__6);
	                    this.state = 1620;
	                    localctx.index = this.valueExpression(0);
	                    this.state = 1621;
	                    this.match(SqlBaseParser.T__7);
	                    break;

	                case 2:
	                    localctx = new DereferenceContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState));
	                    localctx.base = _prevctx;
	                    this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_primaryExpression);
	                    this.state = 1623;
	                    if (!( this.precpred(this._ctx, 12))) {
	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 12)");
	                    }
	                    this.state = 1624;
	                    this.match(SqlBaseParser.T__0);
	                    this.state = 1625;
	                    localctx.fieldName = this.identifier();
	                    break;

	                } 
	            }
	            this.state = 1630;
	            this._errHandler.sync(this);
	            _alt = this._interp.adaptivePredict(this._input,211,this._ctx);
	        }

	    } catch( error) {
	        if(error instanceof antlr4.error.RecognitionException) {
		        localctx.exception = error;
		        this._errHandler.reportError(this, error);
		        this._errHandler.recover(this, error);
		    } else {
		    	throw error;
		    }
	    } finally {
	        this.unrollRecursionContexts(_parentctx)
	    }
	    return localctx;
	}



	string() {
	    let localctx = new StringContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 94, SqlBaseParser.RULE_string);
	    try {
	        this.state = 1637;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 233:
	            localctx = new BasicStringLiteralContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1631;
	            this.match(SqlBaseParser.STRING);
	            break;
	        case 234:
	            localctx = new UnicodeStringLiteralContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1632;
	            this.match(SqlBaseParser.UNICODE_STRING);
	            this.state = 1635;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,212,this._ctx);
	            if(la_===1) {
	                this.state = 1633;
	                this.match(SqlBaseParser.UESCAPE);
	                this.state = 1634;
	                this.match(SqlBaseParser.STRING);

	            }
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	nullTreatment() {
	    let localctx = new NullTreatmentContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 96, SqlBaseParser.RULE_nullTreatment);
	    try {
	        this.state = 1643;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 88:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1639;
	            this.match(SqlBaseParser.IGNORE);
	            this.state = 1640;
	            this.match(SqlBaseParser.NULLS);
	            break;
	        case 156:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1641;
	            this.match(SqlBaseParser.RESPECT);
	            this.state = 1642;
	            this.match(SqlBaseParser.NULLS);
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	timeZoneSpecifier() {
	    let localctx = new TimeZoneSpecifierContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 98, SqlBaseParser.RULE_timeZoneSpecifier);
	    try {
	        this.state = 1651;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,215,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new TimeZoneIntervalContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1645;
	            this.match(SqlBaseParser.TIME);
	            this.state = 1646;
	            this.match(SqlBaseParser.ZONE);
	            this.state = 1647;
	            this.interval();
	            break;

	        case 2:
	            localctx = new TimeZoneStringContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1648;
	            this.match(SqlBaseParser.TIME);
	            this.state = 1649;
	            this.match(SqlBaseParser.ZONE);
	            this.state = 1650;
	            this.string();
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	comparisonOperator() {
	    let localctx = new ComparisonOperatorContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 100, SqlBaseParser.RULE_comparisonOperator);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1653;
	        _la = this._input.LA(1);
	        if(!(((((_la - 221)) & ~0x1f) === 0 && ((1 << (_la - 221)) & 63) !== 0))) {
	        this._errHandler.recoverInline(this);
	        }
	        else {
	        	this._errHandler.reportMatch(this);
	            this.consume();
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	comparisonQuantifier() {
	    let localctx = new ComparisonQuantifierContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 102, SqlBaseParser.RULE_comparisonQuantifier);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1655;
	        _la = this._input.LA(1);
	        if(!(_la===12 || _la===16 || _la===178)) {
	        this._errHandler.recoverInline(this);
	        }
	        else {
	        	this._errHandler.reportMatch(this);
	            this.consume();
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	booleanValue() {
	    let localctx = new BooleanValueContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 104, SqlBaseParser.RULE_booleanValue);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1657;
	        _la = this._input.LA(1);
	        if(!(_la===67 || _la===196)) {
	        this._errHandler.recoverInline(this);
	        }
	        else {
	        	this._errHandler.reportMatch(this);
	            this.consume();
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	interval() {
	    let localctx = new IntervalContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 106, SqlBaseParser.RULE_interval);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1659;
	        this.match(SqlBaseParser.INTERVAL);
	        this.state = 1661;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===227 || _la===228) {
	            this.state = 1660;
	            localctx.sign = this._input.LT(1);
	            _la = this._input.LA(1);
	            if(!(_la===227 || _la===228)) {
	                localctx.sign = this._errHandler.recoverInline(this);
	            }
	            else {
	            	this._errHandler.reportMatch(this);
	                this.consume();
	            }
	        }

	        this.state = 1663;
	        this.string();
	        this.state = 1664;
	        localctx.from = this.intervalField();
	        this.state = 1667;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,217,this._ctx);
	        if(la_===1) {
	            this.state = 1665;
	            this.match(SqlBaseParser.TO);
	            this.state = 1666;
	            localctx.to = this.intervalField();

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	intervalField() {
	    let localctx = new IntervalFieldContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 108, SqlBaseParser.RULE_intervalField);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1669;
	        _la = this._input.LA(1);
	        if(!(_la===47 || ((((_la - 86)) & ~0x1f) === 0 && ((1 << (_la - 86)) & 1610612737) !== 0) || _la===170 || _la===219)) {
	        this._errHandler.recoverInline(this);
	        }
	        else {
	        	this._errHandler.reportMatch(this);
	            this.consume();
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	normalForm() {
	    let localctx = new NormalFormContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 110, SqlBaseParser.RULE_normalForm);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1671;
	        _la = this._input.LA(1);
	        if(!(((((_la - 119)) & ~0x1f) === 0 && ((1 << (_la - 119)) & 15) !== 0))) {
	        this._errHandler.recoverInline(this);
	        }
	        else {
	        	this._errHandler.reportMatch(this);
	            this.consume();
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	types() {
	    let localctx = new TypesContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 112, SqlBaseParser.RULE_types);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1673;
	        this.match(SqlBaseParser.T__1);
	        this.state = 1682;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if((((_la) & ~0x1f) === 0 && ((1 << _la) & 3879427072) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 548070023) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2513695477) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 2413794779) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794171) !== 0) || ((((_la - 239)) & ~0x1f) === 0 && ((1 << (_la - 239)) & 127) !== 0)) {
	            this.state = 1674;
	            this.type(0);
	            this.state = 1679;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 1675;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1676;
	                this.type(0);
	                this.state = 1681;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	        }

	        this.state = 1684;
	        this.match(SqlBaseParser.T__2);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}


	type(_p) {
		if(_p===undefined) {
		    _p = 0;
		}
	    const _parentctx = this._ctx;
	    const _parentState = this.state;
	    let localctx = new TypeContext(this, this._ctx, _parentState);
	    let _prevctx = localctx;
	    const _startState = 114;
	    this.enterRecursionRule(localctx, 114, SqlBaseParser.RULE_type, _p);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1733;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,223,this._ctx);
	        switch(la_) {
	        case 1:
	            this.state = 1687;
	            this.match(SqlBaseParser.ARRAY);
	            this.state = 1688;
	            this.match(SqlBaseParser.LT);
	            this.state = 1689;
	            this.type(0);
	            this.state = 1690;
	            this.match(SqlBaseParser.GT);
	            break;

	        case 2:
	            this.state = 1692;
	            this.match(SqlBaseParser.MAP);
	            this.state = 1693;
	            this.match(SqlBaseParser.LT);
	            this.state = 1694;
	            this.type(0);
	            this.state = 1695;
	            this.match(SqlBaseParser.T__3);
	            this.state = 1696;
	            this.type(0);
	            this.state = 1697;
	            this.match(SqlBaseParser.GT);
	            break;

	        case 3:
	            this.state = 1699;
	            this.match(SqlBaseParser.ROW);
	            this.state = 1700;
	            this.match(SqlBaseParser.T__1);
	            this.state = 1701;
	            this.identifier();
	            this.state = 1702;
	            this.type(0);
	            this.state = 1709;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 1703;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1704;
	                this.identifier();
	                this.state = 1705;
	                this.type(0);
	                this.state = 1711;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	            this.state = 1712;
	            this.match(SqlBaseParser.T__2);
	            break;

	        case 4:
	            this.state = 1714;
	            this.baseType();
	            this.state = 1726;
	            this._errHandler.sync(this);
	            var la_ = this._interp.adaptivePredict(this._input,222,this._ctx);
	            if(la_===1) {
	                this.state = 1715;
	                this.match(SqlBaseParser.T__1);
	                this.state = 1716;
	                this.typeParameter();
	                this.state = 1721;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	                while(_la===4) {
	                    this.state = 1717;
	                    this.match(SqlBaseParser.T__3);
	                    this.state = 1718;
	                    this.typeParameter();
	                    this.state = 1723;
	                    this._errHandler.sync(this);
	                    _la = this._input.LA(1);
	                }
	                this.state = 1724;
	                this.match(SqlBaseParser.T__2);

	            }
	            break;

	        case 5:
	            this.state = 1728;
	            this.match(SqlBaseParser.INTERVAL);
	            this.state = 1729;
	            localctx.from = this.intervalField();
	            this.state = 1730;
	            this.match(SqlBaseParser.TO);
	            this.state = 1731;
	            localctx.to = this.intervalField();
	            break;

	        }
	        this._ctx.stop = this._input.LT(-1);
	        this.state = 1739;
	        this._errHandler.sync(this);
	        var _alt = this._interp.adaptivePredict(this._input,224,this._ctx)
	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
	            if(_alt===1) {
	                if(this._parseListeners!==null) {
	                    this.triggerExitRuleEvent();
	                }
	                _prevctx = localctx;
	                localctx = new TypeContext(this, _parentctx, _parentState);
	                this.pushNewRecursionContext(localctx, _startState, SqlBaseParser.RULE_type);
	                this.state = 1735;
	                if (!( this.precpred(this._ctx, 6))) {
	                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)");
	                }
	                this.state = 1736;
	                this.match(SqlBaseParser.ARRAY); 
	            }
	            this.state = 1741;
	            this._errHandler.sync(this);
	            _alt = this._interp.adaptivePredict(this._input,224,this._ctx);
	        }

	    } catch( error) {
	        if(error instanceof antlr4.error.RecognitionException) {
		        localctx.exception = error;
		        this._errHandler.reportError(this, error);
		        this._errHandler.recover(this, error);
		    } else {
		    	throw error;
		    }
	    } finally {
	        this.unrollRecursionContexts(_parentctx)
	    }
	    return localctx;
	}



	typeParameter() {
	    let localctx = new TypeParameterContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 116, SqlBaseParser.RULE_typeParameter);
	    try {
	        this.state = 1744;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 236:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1742;
	            this.match(SqlBaseParser.INTEGER_VALUE);
	            break;
	        case 10:
	        case 11:
	        case 12:
	        case 14:
	        case 16:
	        case 17:
	        case 19:
	        case 20:
	        case 21:
	        case 24:
	        case 25:
	        case 26:
	        case 29:
	        case 30:
	        case 31:
	        case 32:
	        case 33:
	        case 34:
	        case 39:
	        case 41:
	        case 45:
	        case 46:
	        case 47:
	        case 49:
	        case 51:
	        case 53:
	        case 55:
	        case 61:
	        case 64:
	        case 66:
	        case 68:
	        case 69:
	        case 70:
	        case 71:
	        case 73:
	        case 76:
	        case 77:
	        case 78:
	        case 79:
	        case 80:
	        case 81:
	        case 84:
	        case 86:
	        case 87:
	        case 88:
	        case 90:
	        case 92:
	        case 95:
	        case 97:
	        case 98:
	        case 100:
	        case 101:
	        case 103:
	        case 104:
	        case 105:
	        case 107:
	        case 109:
	        case 112:
	        case 113:
	        case 114:
	        case 115:
	        case 116:
	        case 117:
	        case 119:
	        case 120:
	        case 121:
	        case 122:
	        case 123:
	        case 124:
	        case 128:
	        case 129:
	        case 130:
	        case 131:
	        case 133:
	        case 134:
	        case 137:
	        case 139:
	        case 140:
	        case 141:
	        case 142:
	        case 143:
	        case 144:
	        case 146:
	        case 147:
	        case 148:
	        case 149:
	        case 151:
	        case 152:
	        case 153:
	        case 154:
	        case 155:
	        case 156:
	        case 157:
	        case 158:
	        case 159:
	        case 160:
	        case 162:
	        case 163:
	        case 164:
	        case 166:
	        case 167:
	        case 168:
	        case 169:
	        case 170:
	        case 171:
	        case 173:
	        case 174:
	        case 175:
	        case 176:
	        case 177:
	        case 178:
	        case 179:
	        case 180:
	        case 181:
	        case 182:
	        case 183:
	        case 184:
	        case 185:
	        case 187:
	        case 188:
	        case 189:
	        case 190:
	        case 192:
	        case 193:
	        case 194:
	        case 195:
	        case 197:
	        case 198:
	        case 199:
	        case 201:
	        case 202:
	        case 205:
	        case 206:
	        case 207:
	        case 209:
	        case 211:
	        case 212:
	        case 213:
	        case 217:
	        case 218:
	        case 219:
	        case 220:
	        case 239:
	        case 240:
	        case 241:
	        case 242:
	        case 243:
	        case 244:
	        case 245:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1743;
	            this.type(0);
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	baseType() {
	    let localctx = new BaseTypeContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 118, SqlBaseParser.RULE_baseType);
	    try {
	        this.state = 1750;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 243:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1746;
	            this.match(SqlBaseParser.TIME_WITH_TIME_ZONE);
	            break;
	        case 244:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1747;
	            this.match(SqlBaseParser.TIMESTAMP_WITH_TIME_ZONE);
	            break;
	        case 245:
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1748;
	            this.match(SqlBaseParser.DOUBLE_PRECISION);
	            break;
	        case 10:
	        case 11:
	        case 12:
	        case 14:
	        case 16:
	        case 17:
	        case 19:
	        case 20:
	        case 21:
	        case 24:
	        case 25:
	        case 26:
	        case 29:
	        case 30:
	        case 31:
	        case 32:
	        case 33:
	        case 34:
	        case 39:
	        case 41:
	        case 45:
	        case 46:
	        case 47:
	        case 49:
	        case 51:
	        case 53:
	        case 55:
	        case 61:
	        case 64:
	        case 66:
	        case 68:
	        case 69:
	        case 70:
	        case 71:
	        case 73:
	        case 76:
	        case 77:
	        case 78:
	        case 79:
	        case 80:
	        case 81:
	        case 84:
	        case 86:
	        case 87:
	        case 88:
	        case 90:
	        case 92:
	        case 95:
	        case 97:
	        case 98:
	        case 100:
	        case 101:
	        case 103:
	        case 104:
	        case 105:
	        case 107:
	        case 109:
	        case 112:
	        case 113:
	        case 114:
	        case 115:
	        case 116:
	        case 117:
	        case 119:
	        case 120:
	        case 121:
	        case 122:
	        case 123:
	        case 124:
	        case 128:
	        case 129:
	        case 130:
	        case 131:
	        case 133:
	        case 134:
	        case 137:
	        case 139:
	        case 140:
	        case 141:
	        case 142:
	        case 143:
	        case 144:
	        case 146:
	        case 147:
	        case 148:
	        case 149:
	        case 151:
	        case 152:
	        case 153:
	        case 154:
	        case 155:
	        case 156:
	        case 157:
	        case 158:
	        case 159:
	        case 160:
	        case 162:
	        case 163:
	        case 164:
	        case 166:
	        case 167:
	        case 168:
	        case 169:
	        case 170:
	        case 171:
	        case 173:
	        case 174:
	        case 175:
	        case 176:
	        case 177:
	        case 178:
	        case 179:
	        case 180:
	        case 181:
	        case 182:
	        case 183:
	        case 184:
	        case 185:
	        case 187:
	        case 188:
	        case 189:
	        case 190:
	        case 192:
	        case 193:
	        case 194:
	        case 195:
	        case 197:
	        case 198:
	        case 199:
	        case 201:
	        case 202:
	        case 205:
	        case 206:
	        case 207:
	        case 209:
	        case 211:
	        case 212:
	        case 213:
	        case 217:
	        case 218:
	        case 219:
	        case 220:
	        case 239:
	        case 240:
	        case 241:
	        case 242:
	            this.enterOuterAlt(localctx, 4);
	            this.state = 1749;
	            this.qualifiedName();
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	whenClause() {
	    let localctx = new WhenClauseContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 120, SqlBaseParser.RULE_whenClause);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1752;
	        this.match(SqlBaseParser.WHEN);
	        this.state = 1753;
	        localctx.condition = this.expression();
	        this.state = 1754;
	        this.match(SqlBaseParser.THEN);
	        this.state = 1755;
	        localctx.result = this.expression();
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	filter() {
	    let localctx = new FilterContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 122, SqlBaseParser.RULE_filter);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1757;
	        this.match(SqlBaseParser.FILTER);
	        this.state = 1758;
	        this.match(SqlBaseParser.T__1);
	        this.state = 1759;
	        this.match(SqlBaseParser.WHERE);
	        this.state = 1760;
	        this.booleanExpression(0);
	        this.state = 1761;
	        this.match(SqlBaseParser.T__2);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	over() {
	    let localctx = new OverContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 124, SqlBaseParser.RULE_over);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1763;
	        this.match(SqlBaseParser.OVER);
	        this.state = 1764;
	        this.match(SqlBaseParser.T__1);
	        this.state = 1775;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===141) {
	            this.state = 1765;
	            this.match(SqlBaseParser.PARTITION);
	            this.state = 1766;
	            this.match(SqlBaseParser.BY);
	            this.state = 1767;
	            localctx._expression = this.expression();
	            localctx.partition.push(localctx._expression);
	            this.state = 1772;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 1768;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1769;
	                localctx._expression = this.expression();
	                localctx.partition.push(localctx._expression);
	                this.state = 1774;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	        }

	        this.state = 1787;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===136) {
	            this.state = 1777;
	            this.match(SqlBaseParser.ORDER);
	            this.state = 1778;
	            this.match(SqlBaseParser.BY);
	            this.state = 1779;
	            this.sortItem();
	            this.state = 1784;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	            while(_la===4) {
	                this.state = 1780;
	                this.match(SqlBaseParser.T__3);
	                this.state = 1781;
	                this.sortItem();
	                this.state = 1786;
	                this._errHandler.sync(this);
	                _la = this._input.LA(1);
	            }
	        }

	        this.state = 1790;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        if(_la===84 || _la===148 || _la===167) {
	            this.state = 1789;
	            this.windowFrame();
	        }

	        this.state = 1792;
	        this.match(SqlBaseParser.T__2);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	windowFrame() {
	    let localctx = new WindowFrameContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 126, SqlBaseParser.RULE_windowFrame);
	    try {
	        this.state = 1818;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,232,this._ctx);
	        switch(la_) {
	        case 1:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1794;
	            localctx.frameType = this.match(SqlBaseParser.RANGE);
	            this.state = 1795;
	            localctx.start = this.frameBound();
	            break;

	        case 2:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1796;
	            localctx.frameType = this.match(SqlBaseParser.ROWS);
	            this.state = 1797;
	            localctx.start = this.frameBound();
	            break;

	        case 3:
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1798;
	            localctx.frameType = this.match(SqlBaseParser.GROUPS);
	            this.state = 1799;
	            localctx.start = this.frameBound();
	            break;

	        case 4:
	            this.enterOuterAlt(localctx, 4);
	            this.state = 1800;
	            localctx.frameType = this.match(SqlBaseParser.RANGE);
	            this.state = 1801;
	            this.match(SqlBaseParser.BETWEEN);
	            this.state = 1802;
	            localctx.start = this.frameBound();
	            this.state = 1803;
	            this.match(SqlBaseParser.AND);
	            this.state = 1804;
	            localctx.end = this.frameBound();
	            break;

	        case 5:
	            this.enterOuterAlt(localctx, 5);
	            this.state = 1806;
	            localctx.frameType = this.match(SqlBaseParser.ROWS);
	            this.state = 1807;
	            this.match(SqlBaseParser.BETWEEN);
	            this.state = 1808;
	            localctx.start = this.frameBound();
	            this.state = 1809;
	            this.match(SqlBaseParser.AND);
	            this.state = 1810;
	            localctx.end = this.frameBound();
	            break;

	        case 6:
	            this.enterOuterAlt(localctx, 6);
	            this.state = 1812;
	            localctx.frameType = this.match(SqlBaseParser.GROUPS);
	            this.state = 1813;
	            this.match(SqlBaseParser.BETWEEN);
	            this.state = 1814;
	            localctx.start = this.frameBound();
	            this.state = 1815;
	            this.match(SqlBaseParser.AND);
	            this.state = 1816;
	            localctx.end = this.frameBound();
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	frameBound() {
	    let localctx = new FrameBoundContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 128, SqlBaseParser.RULE_frameBound);
	    var _la = 0;
	    try {
	        this.state = 1829;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,233,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new UnboundedFrameContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1820;
	            this.match(SqlBaseParser.UNBOUNDED);
	            this.state = 1821;
	            localctx.boundType = this.match(SqlBaseParser.PRECEDING);
	            break;

	        case 2:
	            localctx = new UnboundedFrameContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1822;
	            this.match(SqlBaseParser.UNBOUNDED);
	            this.state = 1823;
	            localctx.boundType = this.match(SqlBaseParser.FOLLOWING);
	            break;

	        case 3:
	            localctx = new CurrentRowBoundContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1824;
	            this.match(SqlBaseParser.CURRENT);
	            this.state = 1825;
	            this.match(SqlBaseParser.ROW);
	            break;

	        case 4:
	            localctx = new BoundedFrameContext(this, localctx);
	            this.enterOuterAlt(localctx, 4);
	            this.state = 1826;
	            this.expression();
	            this.state = 1827;
	            localctx.boundType = this._input.LT(1);
	            _la = this._input.LA(1);
	            if(!(_la===71 || _la===144)) {
	                localctx.boundType = this._errHandler.recoverInline(this);
	            }
	            else {
	            	this._errHandler.reportMatch(this);
	                this.consume();
	            }
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	updateAssignment() {
	    let localctx = new UpdateAssignmentContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 130, SqlBaseParser.RULE_updateAssignment);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1831;
	        this.identifier();
	        this.state = 1832;
	        this.match(SqlBaseParser.EQ);
	        this.state = 1833;
	        this.expression();
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	explainOption() {
	    let localctx = new ExplainOptionContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 132, SqlBaseParser.RULE_explainOption);
	    var _la = 0;
	    try {
	        this.state = 1839;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 73:
	            localctx = new ExplainFormatContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1835;
	            this.match(SqlBaseParser.FORMAT);
	            this.state = 1836;
	            localctx.value = this._input.LT(1);
	            _la = this._input.LA(1);
	            if(!(_la===81 || _la===101 || _la===190)) {
	                localctx.value = this._errHandler.recoverInline(this);
	            }
	            else {
	            	this._errHandler.reportMatch(this);
	                this.consume();
	            }
	            break;
	        case 199:
	            localctx = new ExplainTypeContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1837;
	            this.match(SqlBaseParser.TYPE);
	            this.state = 1838;
	            localctx.value = this._input.LT(1);
	            _la = this._input.LA(1);
	            if(!(_la===55 || _la===98 || _la===112 || _la===209)) {
	                localctx.value = this._errHandler.recoverInline(this);
	            }
	            else {
	            	this._errHandler.reportMatch(this);
	                this.consume();
	            }
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	transactionMode() {
	    let localctx = new TransactionModeContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 134, SqlBaseParser.RULE_transactionMode);
	    var _la = 0;
	    try {
	        this.state = 1846;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 100:
	            localctx = new IsolationLevelContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1841;
	            this.match(SqlBaseParser.ISOLATION);
	            this.state = 1842;
	            this.match(SqlBaseParser.LEVEL);
	            this.state = 1843;
	            this.levelOfIsolation();
	            break;
	        case 149:
	            localctx = new TransactionAccessModeContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1844;
	            this.match(SqlBaseParser.READ);
	            this.state = 1845;
	            localctx.accessMode = this._input.LT(1);
	            _la = this._input.LA(1);
	            if(!(_la===133 || _la===218)) {
	                localctx.accessMode = this._errHandler.recoverInline(this);
	            }
	            else {
	            	this._errHandler.reportMatch(this);
	                this.consume();
	            }
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	levelOfIsolation() {
	    let localctx = new LevelOfIsolationContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 136, SqlBaseParser.RULE_levelOfIsolation);
	    try {
	        this.state = 1855;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,236,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new ReadUncommittedContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1848;
	            this.match(SqlBaseParser.READ);
	            this.state = 1849;
	            this.match(SqlBaseParser.UNCOMMITTED);
	            break;

	        case 2:
	            localctx = new ReadCommittedContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1850;
	            this.match(SqlBaseParser.READ);
	            this.state = 1851;
	            this.match(SqlBaseParser.COMMITTED);
	            break;

	        case 3:
	            localctx = new RepeatableReadContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1852;
	            this.match(SqlBaseParser.REPEATABLE);
	            this.state = 1853;
	            this.match(SqlBaseParser.READ);
	            break;

	        case 4:
	            localctx = new SerializableContext(this, localctx);
	            this.enterOuterAlt(localctx, 4);
	            this.state = 1854;
	            this.match(SqlBaseParser.SERIALIZABLE);
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	callArgument() {
	    let localctx = new CallArgumentContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 138, SqlBaseParser.RULE_callArgument);
	    try {
	        this.state = 1862;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,237,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new PositionalArgumentContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1857;
	            this.expression();
	            break;

	        case 2:
	            localctx = new NamedArgumentContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1858;
	            this.identifier();
	            this.state = 1859;
	            this.match(SqlBaseParser.T__8);
	            this.state = 1860;
	            this.expression();
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	privilege() {
	    let localctx = new PrivilegeContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 140, SqlBaseParser.RULE_privilege);
	    try {
	        this.state = 1868;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 172:
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1864;
	            this.match(SqlBaseParser.SELECT);
	            break;
	        case 50:
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1865;
	            this.match(SqlBaseParser.DELETE);
	            break;
	        case 93:
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1866;
	            this.match(SqlBaseParser.INSERT);
	            break;
	        case 10:
	        case 11:
	        case 12:
	        case 14:
	        case 16:
	        case 17:
	        case 19:
	        case 20:
	        case 21:
	        case 24:
	        case 25:
	        case 26:
	        case 29:
	        case 30:
	        case 31:
	        case 32:
	        case 33:
	        case 34:
	        case 39:
	        case 41:
	        case 45:
	        case 46:
	        case 47:
	        case 49:
	        case 51:
	        case 53:
	        case 55:
	        case 61:
	        case 64:
	        case 66:
	        case 68:
	        case 69:
	        case 70:
	        case 71:
	        case 73:
	        case 76:
	        case 77:
	        case 78:
	        case 79:
	        case 80:
	        case 81:
	        case 84:
	        case 86:
	        case 87:
	        case 88:
	        case 90:
	        case 92:
	        case 95:
	        case 97:
	        case 98:
	        case 100:
	        case 101:
	        case 103:
	        case 104:
	        case 105:
	        case 107:
	        case 109:
	        case 112:
	        case 113:
	        case 114:
	        case 115:
	        case 116:
	        case 117:
	        case 119:
	        case 120:
	        case 121:
	        case 122:
	        case 123:
	        case 124:
	        case 128:
	        case 129:
	        case 130:
	        case 131:
	        case 133:
	        case 134:
	        case 137:
	        case 139:
	        case 140:
	        case 141:
	        case 142:
	        case 143:
	        case 144:
	        case 146:
	        case 147:
	        case 148:
	        case 149:
	        case 151:
	        case 152:
	        case 153:
	        case 154:
	        case 155:
	        case 156:
	        case 157:
	        case 158:
	        case 159:
	        case 160:
	        case 162:
	        case 163:
	        case 164:
	        case 166:
	        case 167:
	        case 168:
	        case 169:
	        case 170:
	        case 171:
	        case 173:
	        case 174:
	        case 175:
	        case 176:
	        case 177:
	        case 178:
	        case 179:
	        case 180:
	        case 181:
	        case 182:
	        case 183:
	        case 184:
	        case 185:
	        case 187:
	        case 188:
	        case 189:
	        case 190:
	        case 192:
	        case 193:
	        case 194:
	        case 195:
	        case 197:
	        case 198:
	        case 199:
	        case 201:
	        case 202:
	        case 205:
	        case 206:
	        case 207:
	        case 209:
	        case 211:
	        case 212:
	        case 213:
	        case 217:
	        case 218:
	        case 219:
	        case 220:
	        case 239:
	        case 240:
	        case 241:
	        case 242:
	            this.enterOuterAlt(localctx, 4);
	            this.state = 1867;
	            this.identifier();
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	qualifiedName() {
	    let localctx = new QualifiedNameContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 142, SqlBaseParser.RULE_qualifiedName);
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1870;
	        this.identifier();
	        this.state = 1875;
	        this._errHandler.sync(this);
	        var _alt = this._interp.adaptivePredict(this._input,239,this._ctx)
	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
	            if(_alt===1) {
	                this.state = 1871;
	                this.match(SqlBaseParser.T__0);
	                this.state = 1872;
	                this.identifier(); 
	            }
	            this.state = 1877;
	            this._errHandler.sync(this);
	            _alt = this._interp.adaptivePredict(this._input,239,this._ctx);
	        }

	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	tableVersionExpression() {
	    let localctx = new TableVersionExpressionContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 144, SqlBaseParser.RULE_tableVersionExpression);
	    var _la = 0;
	    try {
	        localctx = new TableVersionContext(this, localctx);
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1878;
	        this.match(SqlBaseParser.FOR);
	        this.state = 1879;
	        localctx.tableVersionType = this._input.LT(1);
	        _la = this._input.LA(1);
	        if(!(((((_la - 184)) & ~0x1f) === 0 && ((1 << (_la - 184)) & 268435971) !== 0))) {
	            localctx.tableVersionType = this._errHandler.recoverInline(this);
	        }
	        else {
	        	this._errHandler.reportMatch(this);
	            this.consume();
	        }
	        this.state = 1880;
	        this.match(SqlBaseParser.AS);
	        this.state = 1881;
	        this.match(SqlBaseParser.OF);
	        this.state = 1882;
	        this.valueExpression(0);
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	grantor() {
	    let localctx = new GrantorContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 146, SqlBaseParser.RULE_grantor);
	    try {
	        this.state = 1887;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,240,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new CurrentUserGrantorContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1884;
	            this.match(SqlBaseParser.CURRENT_USER);
	            break;

	        case 2:
	            localctx = new CurrentRoleGrantorContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1885;
	            this.match(SqlBaseParser.CURRENT_ROLE);
	            break;

	        case 3:
	            localctx = new SpecifiedPrincipalContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1886;
	            this.principal();
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	principal() {
	    let localctx = new PrincipalContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 148, SqlBaseParser.RULE_principal);
	    try {
	        this.state = 1894;
	        this._errHandler.sync(this);
	        var la_ = this._interp.adaptivePredict(this._input,241,this._ctx);
	        switch(la_) {
	        case 1:
	            localctx = new UserPrincipalContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1889;
	            this.match(SqlBaseParser.USER);
	            this.state = 1890;
	            this.identifier();
	            break;

	        case 2:
	            localctx = new RolePrincipalContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1891;
	            this.match(SqlBaseParser.ROLE);
	            this.state = 1892;
	            this.identifier();
	            break;

	        case 3:
	            localctx = new UnspecifiedPrincipalContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1893;
	            this.identifier();
	            break;

	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	roles() {
	    let localctx = new RolesContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 150, SqlBaseParser.RULE_roles);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1896;
	        this.identifier();
	        this.state = 1901;
	        this._errHandler.sync(this);
	        _la = this._input.LA(1);
	        while(_la===4) {
	            this.state = 1897;
	            this.match(SqlBaseParser.T__3);
	            this.state = 1898;
	            this.identifier();
	            this.state = 1903;
	            this._errHandler.sync(this);
	            _la = this._input.LA(1);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	identifier() {
	    let localctx = new IdentifierContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 152, SqlBaseParser.RULE_identifier);
	    try {
	        this.state = 1909;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 239:
	            localctx = new UnquotedIdentifierContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1904;
	            this.match(SqlBaseParser.IDENTIFIER);
	            break;
	        case 241:
	            localctx = new QuotedIdentifierContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1905;
	            this.match(SqlBaseParser.QUOTED_IDENTIFIER);
	            break;
	        case 10:
	        case 11:
	        case 12:
	        case 14:
	        case 16:
	        case 17:
	        case 19:
	        case 20:
	        case 21:
	        case 24:
	        case 25:
	        case 26:
	        case 29:
	        case 30:
	        case 31:
	        case 32:
	        case 33:
	        case 34:
	        case 39:
	        case 41:
	        case 45:
	        case 46:
	        case 47:
	        case 49:
	        case 51:
	        case 53:
	        case 55:
	        case 61:
	        case 64:
	        case 66:
	        case 68:
	        case 69:
	        case 70:
	        case 71:
	        case 73:
	        case 76:
	        case 77:
	        case 78:
	        case 79:
	        case 80:
	        case 81:
	        case 84:
	        case 86:
	        case 87:
	        case 88:
	        case 90:
	        case 92:
	        case 95:
	        case 97:
	        case 98:
	        case 100:
	        case 101:
	        case 103:
	        case 104:
	        case 105:
	        case 107:
	        case 109:
	        case 112:
	        case 113:
	        case 114:
	        case 115:
	        case 116:
	        case 117:
	        case 119:
	        case 120:
	        case 121:
	        case 122:
	        case 123:
	        case 124:
	        case 128:
	        case 129:
	        case 130:
	        case 131:
	        case 133:
	        case 134:
	        case 137:
	        case 139:
	        case 140:
	        case 141:
	        case 142:
	        case 143:
	        case 144:
	        case 146:
	        case 147:
	        case 148:
	        case 149:
	        case 151:
	        case 152:
	        case 153:
	        case 154:
	        case 155:
	        case 156:
	        case 157:
	        case 158:
	        case 159:
	        case 160:
	        case 162:
	        case 163:
	        case 164:
	        case 166:
	        case 167:
	        case 168:
	        case 169:
	        case 170:
	        case 171:
	        case 173:
	        case 174:
	        case 175:
	        case 176:
	        case 177:
	        case 178:
	        case 179:
	        case 180:
	        case 181:
	        case 182:
	        case 183:
	        case 184:
	        case 185:
	        case 187:
	        case 188:
	        case 189:
	        case 190:
	        case 192:
	        case 193:
	        case 194:
	        case 195:
	        case 197:
	        case 198:
	        case 199:
	        case 201:
	        case 202:
	        case 205:
	        case 206:
	        case 207:
	        case 209:
	        case 211:
	        case 212:
	        case 213:
	        case 217:
	        case 218:
	        case 219:
	        case 220:
	            localctx = new UnquotedIdentifierContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1906;
	            this.nonReserved();
	            break;
	        case 242:
	            localctx = new BackQuotedIdentifierContext(this, localctx);
	            this.enterOuterAlt(localctx, 4);
	            this.state = 1907;
	            this.match(SqlBaseParser.BACKQUOTED_IDENTIFIER);
	            break;
	        case 240:
	            localctx = new DigitIdentifierContext(this, localctx);
	            this.enterOuterAlt(localctx, 5);
	            this.state = 1908;
	            this.match(SqlBaseParser.DIGIT_IDENTIFIER);
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	number() {
	    let localctx = new NumberContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 154, SqlBaseParser.RULE_number);
	    try {
	        this.state = 1914;
	        this._errHandler.sync(this);
	        switch(this._input.LA(1)) {
	        case 237:
	            localctx = new DecimalLiteralContext(this, localctx);
	            this.enterOuterAlt(localctx, 1);
	            this.state = 1911;
	            this.match(SqlBaseParser.DECIMAL_VALUE);
	            break;
	        case 238:
	            localctx = new DoubleLiteralContext(this, localctx);
	            this.enterOuterAlt(localctx, 2);
	            this.state = 1912;
	            this.match(SqlBaseParser.DOUBLE_VALUE);
	            break;
	        case 236:
	            localctx = new IntegerLiteralContext(this, localctx);
	            this.enterOuterAlt(localctx, 3);
	            this.state = 1913;
	            this.match(SqlBaseParser.INTEGER_VALUE);
	            break;
	        default:
	            throw new antlr4.error.NoViableAltException(this);
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}



	nonReserved() {
	    let localctx = new NonReservedContext(this, this._ctx, this.state);
	    this.enterRule(localctx, 156, SqlBaseParser.RULE_nonReserved);
	    var _la = 0;
	    try {
	        this.enterOuterAlt(localctx, 1);
	        this.state = 1916;
	        _la = this._input.LA(1);
	        if(!((((_la) & ~0x1f) === 0 && ((1 << _la) & 3879427072) !== 0) || ((((_la - 32)) & ~0x1f) === 0 && ((1 << (_la - 32)) & 548070023) !== 0) || ((((_la - 64)) & ~0x1f) === 0 && ((1 << (_la - 64)) & 2513695477) !== 0) || ((((_la - 97)) & ~0x1f) === 0 && ((1 << (_la - 97)) & 2413794779) !== 0) || ((((_la - 129)) & ~0x1f) === 0 && ((1 << (_la - 129)) & 4292803895) !== 0) || ((((_la - 162)) & ~0x1f) === 0 && ((1 << (_la - 162)) & 3741318135) !== 0) || ((((_la - 194)) & ~0x1f) === 0 && ((1 << (_la - 194)) & 126794171) !== 0))) {
	        this._errHandler.recoverInline(this);
	        }
	        else {
	        	this._errHandler.reportMatch(this);
	            this.consume();
	        }
	    } catch (re) {
	    	if(re instanceof antlr4.error.RecognitionException) {
		        localctx.exception = re;
		        this._errHandler.reportError(this, re);
		        this._errHandler.recover(this, re);
		    } else {
		    	throw re;
		    }
	    } finally {
	        this.exitRule();
	    }
	    return localctx;
	}


}

SqlBaseParser.EOF = antlr4.Token.EOF;
SqlBaseParser.T__0 = 1;
SqlBaseParser.T__1 = 2;
SqlBaseParser.T__2 = 3;
SqlBaseParser.T__3 = 4;
SqlBaseParser.T__4 = 5;
SqlBaseParser.T__5 = 6;
SqlBaseParser.T__6 = 7;
SqlBaseParser.T__7 = 8;
SqlBaseParser.T__8 = 9;
SqlBaseParser.ADD = 10;
SqlBaseParser.ADMIN = 11;
SqlBaseParser.ALL = 12;
SqlBaseParser.ALTER = 13;
SqlBaseParser.ANALYZE = 14;
SqlBaseParser.AND = 15;
SqlBaseParser.ANY = 16;
SqlBaseParser.ARRAY = 17;
SqlBaseParser.AS = 18;
SqlBaseParser.ASC = 19;
SqlBaseParser.AT = 20;
SqlBaseParser.BERNOULLI = 21;
SqlBaseParser.BETWEEN = 22;
SqlBaseParser.BY = 23;
SqlBaseParser.CALL = 24;
SqlBaseParser.CALLED = 25;
SqlBaseParser.CASCADE = 26;
SqlBaseParser.CASE = 27;
SqlBaseParser.CAST = 28;
SqlBaseParser.CATALOGS = 29;
SqlBaseParser.COLUMN = 30;
SqlBaseParser.COLUMNS = 31;
SqlBaseParser.COMMENT = 32;
SqlBaseParser.COMMIT = 33;
SqlBaseParser.COMMITTED = 34;
SqlBaseParser.CONSTRAINT = 35;
SqlBaseParser.CREATE = 36;
SqlBaseParser.CROSS = 37;
SqlBaseParser.CUBE = 38;
SqlBaseParser.CURRENT = 39;
SqlBaseParser.CURRENT_DATE = 40;
SqlBaseParser.CURRENT_ROLE = 41;
SqlBaseParser.CURRENT_TIME = 42;
SqlBaseParser.CURRENT_TIMESTAMP = 43;
SqlBaseParser.CURRENT_USER = 44;
SqlBaseParser.DATA = 45;
SqlBaseParser.DATE = 46;
SqlBaseParser.DAY = 47;
SqlBaseParser.DEALLOCATE = 48;
SqlBaseParser.DEFINER = 49;
SqlBaseParser.DELETE = 50;
SqlBaseParser.DESC = 51;
SqlBaseParser.DESCRIBE = 52;
SqlBaseParser.DETERMINISTIC = 53;
SqlBaseParser.DISTINCT = 54;
SqlBaseParser.DISTRIBUTED = 55;
SqlBaseParser.DROP = 56;
SqlBaseParser.ELSE = 57;
SqlBaseParser.END = 58;
SqlBaseParser.ESCAPE = 59;
SqlBaseParser.EXCEPT = 60;
SqlBaseParser.EXCLUDING = 61;
SqlBaseParser.EXECUTE = 62;
SqlBaseParser.EXISTS = 63;
SqlBaseParser.EXPLAIN = 64;
SqlBaseParser.EXTRACT = 65;
SqlBaseParser.EXTERNAL = 66;
SqlBaseParser.FALSE = 67;
SqlBaseParser.FETCH = 68;
SqlBaseParser.FILTER = 69;
SqlBaseParser.FIRST = 70;
SqlBaseParser.FOLLOWING = 71;
SqlBaseParser.FOR = 72;
SqlBaseParser.FORMAT = 73;
SqlBaseParser.FROM = 74;
SqlBaseParser.FULL = 75;
SqlBaseParser.FUNCTION = 76;
SqlBaseParser.FUNCTIONS = 77;
SqlBaseParser.GRANT = 78;
SqlBaseParser.GRANTED = 79;
SqlBaseParser.GRANTS = 80;
SqlBaseParser.GRAPHVIZ = 81;
SqlBaseParser.GROUP = 82;
SqlBaseParser.GROUPING = 83;
SqlBaseParser.GROUPS = 84;
SqlBaseParser.HAVING = 85;
SqlBaseParser.HOUR = 86;
SqlBaseParser.IF = 87;
SqlBaseParser.IGNORE = 88;
SqlBaseParser.IN = 89;
SqlBaseParser.INCLUDING = 90;
SqlBaseParser.INNER = 91;
SqlBaseParser.INPUT = 92;
SqlBaseParser.INSERT = 93;
SqlBaseParser.INTERSECT = 94;
SqlBaseParser.INTERVAL = 95;
SqlBaseParser.INTO = 96;
SqlBaseParser.INVOKER = 97;
SqlBaseParser.IO = 98;
SqlBaseParser.IS = 99;
SqlBaseParser.ISOLATION = 100;
SqlBaseParser.JSON = 101;
SqlBaseParser.JOIN = 102;
SqlBaseParser.LANGUAGE = 103;
SqlBaseParser.LAST = 104;
SqlBaseParser.LATERAL = 105;
SqlBaseParser.LEFT = 106;
SqlBaseParser.LEVEL = 107;
SqlBaseParser.LIKE = 108;
SqlBaseParser.LIMIT = 109;
SqlBaseParser.LOCALTIME = 110;
SqlBaseParser.LOCALTIMESTAMP = 111;
SqlBaseParser.LOGICAL = 112;
SqlBaseParser.MAP = 113;
SqlBaseParser.MATERIALIZED = 114;
SqlBaseParser.MINUTE = 115;
SqlBaseParser.MONTH = 116;
SqlBaseParser.NAME = 117;
SqlBaseParser.NATURAL = 118;
SqlBaseParser.NFC = 119;
SqlBaseParser.NFD = 120;
SqlBaseParser.NFKC = 121;
SqlBaseParser.NFKD = 122;
SqlBaseParser.NO = 123;
SqlBaseParser.NONE = 124;
SqlBaseParser.NORMALIZE = 125;
SqlBaseParser.NOT = 126;
SqlBaseParser.NULL = 127;
SqlBaseParser.NULLIF = 128;
SqlBaseParser.NULLS = 129;
SqlBaseParser.OF = 130;
SqlBaseParser.OFFSET = 131;
SqlBaseParser.ON = 132;
SqlBaseParser.ONLY = 133;
SqlBaseParser.OPTION = 134;
SqlBaseParser.OR = 135;
SqlBaseParser.ORDER = 136;
SqlBaseParser.ORDINALITY = 137;
SqlBaseParser.OUTER = 138;
SqlBaseParser.OUTPUT = 139;
SqlBaseParser.OVER = 140;
SqlBaseParser.PARTITION = 141;
SqlBaseParser.PARTITIONS = 142;
SqlBaseParser.POSITION = 143;
SqlBaseParser.PRECEDING = 144;
SqlBaseParser.PREPARE = 145;
SqlBaseParser.PRIVILEGES = 146;
SqlBaseParser.PROPERTIES = 147;
SqlBaseParser.RANGE = 148;
SqlBaseParser.READ = 149;
SqlBaseParser.RECURSIVE = 150;
SqlBaseParser.REFRESH = 151;
SqlBaseParser.RENAME = 152;
SqlBaseParser.REPEATABLE = 153;
SqlBaseParser.REPLACE = 154;
SqlBaseParser.RESET = 155;
SqlBaseParser.RESPECT = 156;
SqlBaseParser.RESTRICT = 157;
SqlBaseParser.RETURN = 158;
SqlBaseParser.RETURNS = 159;
SqlBaseParser.REVOKE = 160;
SqlBaseParser.RIGHT = 161;
SqlBaseParser.ROLE = 162;
SqlBaseParser.ROLES = 163;
SqlBaseParser.ROLLBACK = 164;
SqlBaseParser.ROLLUP = 165;
SqlBaseParser.ROW = 166;
SqlBaseParser.ROWS = 167;
SqlBaseParser.SCHEMA = 168;
SqlBaseParser.SCHEMAS = 169;
SqlBaseParser.SECOND = 170;
SqlBaseParser.SECURITY = 171;
SqlBaseParser.SELECT = 172;
SqlBaseParser.SERIALIZABLE = 173;
SqlBaseParser.SESSION = 174;
SqlBaseParser.SET = 175;
SqlBaseParser.SETS = 176;
SqlBaseParser.SHOW = 177;
SqlBaseParser.SOME = 178;
SqlBaseParser.SQL = 179;
SqlBaseParser.START = 180;
SqlBaseParser.STATS = 181;
SqlBaseParser.SUBSTRING = 182;
SqlBaseParser.SYSTEM = 183;
SqlBaseParser.SYSTEM_TIME = 184;
SqlBaseParser.SYSTEM_VERSION = 185;
SqlBaseParser.TABLE = 186;
SqlBaseParser.TABLES = 187;
SqlBaseParser.TABLESAMPLE = 188;
SqlBaseParser.TEMPORARY = 189;
SqlBaseParser.TEXT = 190;
SqlBaseParser.THEN = 191;
SqlBaseParser.TIME = 192;
SqlBaseParser.TIMESTAMP = 193;
SqlBaseParser.TO = 194;
SqlBaseParser.TRANSACTION = 195;
SqlBaseParser.TRUE = 196;
SqlBaseParser.TRUNCATE = 197;
SqlBaseParser.TRY_CAST = 198;
SqlBaseParser.TYPE = 199;
SqlBaseParser.UESCAPE = 200;
SqlBaseParser.UNBOUNDED = 201;
SqlBaseParser.UNCOMMITTED = 202;
SqlBaseParser.UNION = 203;
SqlBaseParser.UNNEST = 204;
SqlBaseParser.UPDATE = 205;
SqlBaseParser.USE = 206;
SqlBaseParser.USER = 207;
SqlBaseParser.USING = 208;
SqlBaseParser.VALIDATE = 209;
SqlBaseParser.VALUES = 210;
SqlBaseParser.VERBOSE = 211;
SqlBaseParser.VERSION = 212;
SqlBaseParser.VIEW = 213;
SqlBaseParser.WHEN = 214;
SqlBaseParser.WHERE = 215;
SqlBaseParser.WITH = 216;
SqlBaseParser.WORK = 217;
SqlBaseParser.WRITE = 218;
SqlBaseParser.YEAR = 219;
SqlBaseParser.ZONE = 220;
SqlBaseParser.EQ = 221;
SqlBaseParser.NEQ = 222;
SqlBaseParser.LT = 223;
SqlBaseParser.LTE = 224;
SqlBaseParser.GT = 225;
SqlBaseParser.GTE = 226;
SqlBaseParser.PLUS = 227;
SqlBaseParser.MINUS = 228;
SqlBaseParser.ASTERISK = 229;
SqlBaseParser.SLASH = 230;
SqlBaseParser.PERCENT = 231;
SqlBaseParser.CONCAT = 232;
SqlBaseParser.STRING = 233;
SqlBaseParser.UNICODE_STRING = 234;
SqlBaseParser.BINARY_LITERAL = 235;
SqlBaseParser.INTEGER_VALUE = 236;
SqlBaseParser.DECIMAL_VALUE = 237;
SqlBaseParser.DOUBLE_VALUE = 238;
SqlBaseParser.IDENTIFIER = 239;
SqlBaseParser.DIGIT_IDENTIFIER = 240;
SqlBaseParser.QUOTED_IDENTIFIER = 241;
SqlBaseParser.BACKQUOTED_IDENTIFIER = 242;
SqlBaseParser.TIME_WITH_TIME_ZONE = 243;
SqlBaseParser.TIMESTAMP_WITH_TIME_ZONE = 244;
SqlBaseParser.DOUBLE_PRECISION = 245;
SqlBaseParser.SIMPLE_COMMENT = 246;
SqlBaseParser.BRACKETED_COMMENT = 247;
SqlBaseParser.WS = 248;
SqlBaseParser.UNRECOGNIZED = 249;
SqlBaseParser.DELIMITER = 250;

SqlBaseParser.RULE_singleStatement = 0;
SqlBaseParser.RULE_standaloneExpression = 1;
SqlBaseParser.RULE_standaloneRoutineBody = 2;
SqlBaseParser.RULE_statement = 3;
SqlBaseParser.RULE_query = 4;
SqlBaseParser.RULE_with = 5;
SqlBaseParser.RULE_tableElement = 6;
SqlBaseParser.RULE_columnDefinition = 7;
SqlBaseParser.RULE_likeClause = 8;
SqlBaseParser.RULE_properties = 9;
SqlBaseParser.RULE_property = 10;
SqlBaseParser.RULE_sqlParameterDeclaration = 11;
SqlBaseParser.RULE_routineCharacteristics = 12;
SqlBaseParser.RULE_routineCharacteristic = 13;
SqlBaseParser.RULE_alterRoutineCharacteristics = 14;
SqlBaseParser.RULE_alterRoutineCharacteristic = 15;
SqlBaseParser.RULE_routineBody = 16;
SqlBaseParser.RULE_returnStatement = 17;
SqlBaseParser.RULE_externalBodyReference = 18;
SqlBaseParser.RULE_language = 19;
SqlBaseParser.RULE_determinism = 20;
SqlBaseParser.RULE_nullCallClause = 21;
SqlBaseParser.RULE_externalRoutineName = 22;
SqlBaseParser.RULE_queryNoWith = 23;
SqlBaseParser.RULE_queryTerm = 24;
SqlBaseParser.RULE_queryPrimary = 25;
SqlBaseParser.RULE_sortItem = 26;
SqlBaseParser.RULE_querySpecification = 27;
SqlBaseParser.RULE_groupBy = 28;
SqlBaseParser.RULE_groupingElement = 29;
SqlBaseParser.RULE_groupingSet = 30;
SqlBaseParser.RULE_namedQuery = 31;
SqlBaseParser.RULE_setQuantifier = 32;
SqlBaseParser.RULE_selectItem = 33;
SqlBaseParser.RULE_relation = 34;
SqlBaseParser.RULE_joinType = 35;
SqlBaseParser.RULE_joinCriteria = 36;
SqlBaseParser.RULE_sampledRelation = 37;
SqlBaseParser.RULE_sampleType = 38;
SqlBaseParser.RULE_aliasedRelation = 39;
SqlBaseParser.RULE_columnAliases = 40;
SqlBaseParser.RULE_relationPrimary = 41;
SqlBaseParser.RULE_expression = 42;
SqlBaseParser.RULE_booleanExpression = 43;
SqlBaseParser.RULE_predicate = 44;
SqlBaseParser.RULE_valueExpression = 45;
SqlBaseParser.RULE_primaryExpression = 46;
SqlBaseParser.RULE_string = 47;
SqlBaseParser.RULE_nullTreatment = 48;
SqlBaseParser.RULE_timeZoneSpecifier = 49;
SqlBaseParser.RULE_comparisonOperator = 50;
SqlBaseParser.RULE_comparisonQuantifier = 51;
SqlBaseParser.RULE_booleanValue = 52;
SqlBaseParser.RULE_interval = 53;
SqlBaseParser.RULE_intervalField = 54;
SqlBaseParser.RULE_normalForm = 55;
SqlBaseParser.RULE_types = 56;
SqlBaseParser.RULE_type = 57;
SqlBaseParser.RULE_typeParameter = 58;
SqlBaseParser.RULE_baseType = 59;
SqlBaseParser.RULE_whenClause = 60;
SqlBaseParser.RULE_filter = 61;
SqlBaseParser.RULE_over = 62;
SqlBaseParser.RULE_windowFrame = 63;
SqlBaseParser.RULE_frameBound = 64;
SqlBaseParser.RULE_updateAssignment = 65;
SqlBaseParser.RULE_explainOption = 66;
SqlBaseParser.RULE_transactionMode = 67;
SqlBaseParser.RULE_levelOfIsolation = 68;
SqlBaseParser.RULE_callArgument = 69;
SqlBaseParser.RULE_privilege = 70;
SqlBaseParser.RULE_qualifiedName = 71;
SqlBaseParser.RULE_tableVersionExpression = 72;
SqlBaseParser.RULE_grantor = 73;
SqlBaseParser.RULE_principal = 74;
SqlBaseParser.RULE_roles = 75;
SqlBaseParser.RULE_identifier = 76;
SqlBaseParser.RULE_number = 77;
SqlBaseParser.RULE_nonReserved = 78;

class SingleStatementContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_singleStatement;
    }

	statement() {
	    return this.getTypedRuleContext(StatementContext,0);
	};

	EOF() {
	    return this.getToken(SqlBaseParser.EOF, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSingleStatement(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSingleStatement(this);
		}
	}


}



class StandaloneExpressionContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_standaloneExpression;
    }

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	EOF() {
	    return this.getToken(SqlBaseParser.EOF, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterStandaloneExpression(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitStandaloneExpression(this);
		}
	}


}



class StandaloneRoutineBodyContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_standaloneRoutineBody;
    }

	routineBody() {
	    return this.getTypedRuleContext(RoutineBodyContext,0);
	};

	EOF() {
	    return this.getToken(SqlBaseParser.EOF, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterStandaloneRoutineBody(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitStandaloneRoutineBody(this);
		}
	}


}



class StatementContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_statement;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class ExplainContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	EXPLAIN() {
	    return this.getToken(SqlBaseParser.EXPLAIN, 0);
	};

	statement() {
	    return this.getTypedRuleContext(StatementContext,0);
	};

	ANALYZE() {
	    return this.getToken(SqlBaseParser.ANALYZE, 0);
	};

	VERBOSE() {
	    return this.getToken(SqlBaseParser.VERBOSE, 0);
	};

	explainOption = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExplainOptionContext);
	    } else {
	        return this.getTypedRuleContext(ExplainOptionContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterExplain(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitExplain(this);
		}
	}


}

SqlBaseParser.ExplainContext = ExplainContext;

class PrepareContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	PREPARE() {
	    return this.getToken(SqlBaseParser.PREPARE, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	statement() {
	    return this.getTypedRuleContext(StatementContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterPrepare(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitPrepare(this);
		}
	}


}

SqlBaseParser.PrepareContext = PrepareContext;

class DropMaterializedViewContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DROP() {
	    return this.getToken(SqlBaseParser.DROP, 0);
	};

	MATERIALIZED() {
	    return this.getToken(SqlBaseParser.MATERIALIZED, 0);
	};

	VIEW() {
	    return this.getToken(SqlBaseParser.VIEW, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	IF() {
	    return this.getToken(SqlBaseParser.IF, 0);
	};

	EXISTS() {
	    return this.getToken(SqlBaseParser.EXISTS, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDropMaterializedView(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDropMaterializedView(this);
		}
	}


}

SqlBaseParser.DropMaterializedViewContext = DropMaterializedViewContext;

class UseContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.schema = null;;
        this.catalog = null;;
        super.copyFrom(ctx);
    }

	USE() {
	    return this.getToken(SqlBaseParser.USE, 0);
	};

	identifier = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(IdentifierContext);
	    } else {
	        return this.getTypedRuleContext(IdentifierContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterUse(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitUse(this);
		}
	}


}

SqlBaseParser.UseContext = UseContext;

class DeallocateContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DEALLOCATE() {
	    return this.getToken(SqlBaseParser.DEALLOCATE, 0);
	};

	PREPARE() {
	    return this.getToken(SqlBaseParser.PREPARE, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDeallocate(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDeallocate(this);
		}
	}


}

SqlBaseParser.DeallocateContext = DeallocateContext;

class RenameTableContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.from = null;;
        this.to = null;;
        super.copyFrom(ctx);
    }

	ALTER() {
	    return this.getToken(SqlBaseParser.ALTER, 0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	RENAME() {
	    return this.getToken(SqlBaseParser.RENAME, 0);
	};

	TO() {
	    return this.getToken(SqlBaseParser.TO, 0);
	};

	qualifiedName = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(QualifiedNameContext);
	    } else {
	        return this.getTypedRuleContext(QualifiedNameContext,i);
	    }
	};

	IF() {
	    return this.getToken(SqlBaseParser.IF, 0);
	};

	EXISTS() {
	    return this.getToken(SqlBaseParser.EXISTS, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRenameTable(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRenameTable(this);
		}
	}


}

SqlBaseParser.RenameTableContext = RenameTableContext;

class CommitContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	COMMIT() {
	    return this.getToken(SqlBaseParser.COMMIT, 0);
	};

	WORK() {
	    return this.getToken(SqlBaseParser.WORK, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCommit(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCommit(this);
		}
	}


}

SqlBaseParser.CommitContext = CommitContext;

class CreateRoleContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.name = null;;
        super.copyFrom(ctx);
    }

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	ROLE() {
	    return this.getToken(SqlBaseParser.ROLE, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	WITH() {
	    return this.getToken(SqlBaseParser.WITH, 0);
	};

	ADMIN() {
	    return this.getToken(SqlBaseParser.ADMIN, 0);
	};

	grantor() {
	    return this.getTypedRuleContext(GrantorContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCreateRole(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCreateRole(this);
		}
	}


}

SqlBaseParser.CreateRoleContext = CreateRoleContext;

class ShowCreateFunctionContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	FUNCTION() {
	    return this.getToken(SqlBaseParser.FUNCTION, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	types() {
	    return this.getTypedRuleContext(TypesContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowCreateFunction(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowCreateFunction(this);
		}
	}


}

SqlBaseParser.ShowCreateFunctionContext = ShowCreateFunctionContext;

class DropColumnContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.tableName = null;;
        this.column = null;;
        super.copyFrom(ctx);
    }

	ALTER() {
	    return this.getToken(SqlBaseParser.ALTER, 0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	DROP() {
	    return this.getToken(SqlBaseParser.DROP, 0);
	};

	COLUMN() {
	    return this.getToken(SqlBaseParser.COLUMN, 0);
	};

	qualifiedName = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(QualifiedNameContext);
	    } else {
	        return this.getTypedRuleContext(QualifiedNameContext,i);
	    }
	};

	IF = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.IF);
	    } else {
	        return this.getToken(SqlBaseParser.IF, i);
	    }
	};


	EXISTS = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.EXISTS);
	    } else {
	        return this.getToken(SqlBaseParser.EXISTS, i);
	    }
	};


	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDropColumn(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDropColumn(this);
		}
	}


}

SqlBaseParser.DropColumnContext = DropColumnContext;

class DropViewContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DROP() {
	    return this.getToken(SqlBaseParser.DROP, 0);
	};

	VIEW() {
	    return this.getToken(SqlBaseParser.VIEW, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	IF() {
	    return this.getToken(SqlBaseParser.IF, 0);
	};

	EXISTS() {
	    return this.getToken(SqlBaseParser.EXISTS, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDropView(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDropView(this);
		}
	}


}

SqlBaseParser.DropViewContext = DropViewContext;

class ShowTablesContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.pattern = null;;
        this.escape = null;;
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	TABLES() {
	    return this.getToken(SqlBaseParser.TABLES, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	LIKE() {
	    return this.getToken(SqlBaseParser.LIKE, 0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	IN() {
	    return this.getToken(SqlBaseParser.IN, 0);
	};

	string = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(StringContext);
	    } else {
	        return this.getTypedRuleContext(StringContext,i);
	    }
	};

	ESCAPE() {
	    return this.getToken(SqlBaseParser.ESCAPE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowTables(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowTables(this);
		}
	}


}

SqlBaseParser.ShowTablesContext = ShowTablesContext;

class ShowCatalogsContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.pattern = null;;
        this.escape = null;;
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	CATALOGS() {
	    return this.getToken(SqlBaseParser.CATALOGS, 0);
	};

	LIKE() {
	    return this.getToken(SqlBaseParser.LIKE, 0);
	};

	string = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(StringContext);
	    } else {
	        return this.getTypedRuleContext(StringContext,i);
	    }
	};

	ESCAPE() {
	    return this.getToken(SqlBaseParser.ESCAPE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowCatalogs(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowCatalogs(this);
		}
	}


}

SqlBaseParser.ShowCatalogsContext = ShowCatalogsContext;

class ShowRolesContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	ROLES() {
	    return this.getToken(SqlBaseParser.ROLES, 0);
	};

	CURRENT() {
	    return this.getToken(SqlBaseParser.CURRENT, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	IN() {
	    return this.getToken(SqlBaseParser.IN, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowRoles(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowRoles(this);
		}
	}


}

SqlBaseParser.ShowRolesContext = ShowRolesContext;

class RenameColumnContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.tableName = null;;
        this.from = null;;
        this.to = null;;
        super.copyFrom(ctx);
    }

	ALTER() {
	    return this.getToken(SqlBaseParser.ALTER, 0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	RENAME() {
	    return this.getToken(SqlBaseParser.RENAME, 0);
	};

	COLUMN() {
	    return this.getToken(SqlBaseParser.COLUMN, 0);
	};

	TO() {
	    return this.getToken(SqlBaseParser.TO, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	identifier = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(IdentifierContext);
	    } else {
	        return this.getTypedRuleContext(IdentifierContext,i);
	    }
	};

	IF = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.IF);
	    } else {
	        return this.getToken(SqlBaseParser.IF, i);
	    }
	};


	EXISTS = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.EXISTS);
	    } else {
	        return this.getToken(SqlBaseParser.EXISTS, i);
	    }
	};


	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRenameColumn(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRenameColumn(this);
		}
	}


}

SqlBaseParser.RenameColumnContext = RenameColumnContext;

class RevokeRolesContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	REVOKE() {
	    return this.getToken(SqlBaseParser.REVOKE, 0);
	};

	roles() {
	    return this.getTypedRuleContext(RolesContext,0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	principal = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(PrincipalContext);
	    } else {
	        return this.getTypedRuleContext(PrincipalContext,i);
	    }
	};

	ADMIN() {
	    return this.getToken(SqlBaseParser.ADMIN, 0);
	};

	OPTION() {
	    return this.getToken(SqlBaseParser.OPTION, 0);
	};

	FOR() {
	    return this.getToken(SqlBaseParser.FOR, 0);
	};

	GRANTED() {
	    return this.getToken(SqlBaseParser.GRANTED, 0);
	};

	BY() {
	    return this.getToken(SqlBaseParser.BY, 0);
	};

	grantor() {
	    return this.getTypedRuleContext(GrantorContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRevokeRoles(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRevokeRoles(this);
		}
	}


}

SqlBaseParser.RevokeRolesContext = RevokeRolesContext;

class ShowCreateTableContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowCreateTable(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowCreateTable(this);
		}
	}


}

SqlBaseParser.ShowCreateTableContext = ShowCreateTableContext;

class ShowColumnsContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	COLUMNS() {
	    return this.getToken(SqlBaseParser.COLUMNS, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	IN() {
	    return this.getToken(SqlBaseParser.IN, 0);
	};

	DESCRIBE() {
	    return this.getToken(SqlBaseParser.DESCRIBE, 0);
	};

	DESC() {
	    return this.getToken(SqlBaseParser.DESC, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowColumns(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowColumns(this);
		}
	}


}

SqlBaseParser.ShowColumnsContext = ShowColumnsContext;

class ShowRoleGrantsContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	ROLE() {
	    return this.getToken(SqlBaseParser.ROLE, 0);
	};

	GRANTS() {
	    return this.getToken(SqlBaseParser.GRANTS, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	IN() {
	    return this.getToken(SqlBaseParser.IN, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowRoleGrants(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowRoleGrants(this);
		}
	}


}

SqlBaseParser.ShowRoleGrantsContext = ShowRoleGrantsContext;

class AddColumnContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.tableName = null;;
        this.column = null;;
        super.copyFrom(ctx);
    }

	ALTER() {
	    return this.getToken(SqlBaseParser.ALTER, 0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	ADD() {
	    return this.getToken(SqlBaseParser.ADD, 0);
	};

	COLUMN() {
	    return this.getToken(SqlBaseParser.COLUMN, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	columnDefinition() {
	    return this.getTypedRuleContext(ColumnDefinitionContext,0);
	};

	IF = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.IF);
	    } else {
	        return this.getToken(SqlBaseParser.IF, i);
	    }
	};


	EXISTS = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.EXISTS);
	    } else {
	        return this.getToken(SqlBaseParser.EXISTS, i);
	    }
	};


	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterAddColumn(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitAddColumn(this);
		}
	}


}

SqlBaseParser.AddColumnContext = AddColumnContext;

class ResetSessionContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	RESET() {
	    return this.getToken(SqlBaseParser.RESET, 0);
	};

	SESSION() {
	    return this.getToken(SqlBaseParser.SESSION, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterResetSession(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitResetSession(this);
		}
	}


}

SqlBaseParser.ResetSessionContext = ResetSessionContext;

class InsertIntoContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	INSERT() {
	    return this.getToken(SqlBaseParser.INSERT, 0);
	};

	INTO() {
	    return this.getToken(SqlBaseParser.INTO, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	columnAliases() {
	    return this.getTypedRuleContext(ColumnAliasesContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterInsertInto(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitInsertInto(this);
		}
	}


}

SqlBaseParser.InsertIntoContext = InsertIntoContext;

class ShowSessionContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.pattern = null;;
        this.escape = null;;
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	SESSION() {
	    return this.getToken(SqlBaseParser.SESSION, 0);
	};

	LIKE() {
	    return this.getToken(SqlBaseParser.LIKE, 0);
	};

	string = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(StringContext);
	    } else {
	        return this.getTypedRuleContext(StringContext,i);
	    }
	};

	ESCAPE() {
	    return this.getToken(SqlBaseParser.ESCAPE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowSession(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowSession(this);
		}
	}


}

SqlBaseParser.ShowSessionContext = ShowSessionContext;

class CreateSchemaContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	SCHEMA() {
	    return this.getToken(SqlBaseParser.SCHEMA, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	IF() {
	    return this.getToken(SqlBaseParser.IF, 0);
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	EXISTS() {
	    return this.getToken(SqlBaseParser.EXISTS, 0);
	};

	WITH() {
	    return this.getToken(SqlBaseParser.WITH, 0);
	};

	properties() {
	    return this.getTypedRuleContext(PropertiesContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCreateSchema(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCreateSchema(this);
		}
	}


}

SqlBaseParser.CreateSchemaContext = CreateSchemaContext;

class ExecuteContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	EXECUTE() {
	    return this.getToken(SqlBaseParser.EXECUTE, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	USING() {
	    return this.getToken(SqlBaseParser.USING, 0);
	};

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterExecute(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitExecute(this);
		}
	}


}

SqlBaseParser.ExecuteContext = ExecuteContext;

class RenameSchemaContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	ALTER() {
	    return this.getToken(SqlBaseParser.ALTER, 0);
	};

	SCHEMA() {
	    return this.getToken(SqlBaseParser.SCHEMA, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	RENAME() {
	    return this.getToken(SqlBaseParser.RENAME, 0);
	};

	TO() {
	    return this.getToken(SqlBaseParser.TO, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRenameSchema(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRenameSchema(this);
		}
	}


}

SqlBaseParser.RenameSchemaContext = RenameSchemaContext;

class DropRoleContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.name = null;;
        super.copyFrom(ctx);
    }

	DROP() {
	    return this.getToken(SqlBaseParser.DROP, 0);
	};

	ROLE() {
	    return this.getToken(SqlBaseParser.ROLE, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDropRole(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDropRole(this);
		}
	}


}

SqlBaseParser.DropRoleContext = DropRoleContext;

class AnalyzeContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	ANALYZE() {
	    return this.getToken(SqlBaseParser.ANALYZE, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	WITH() {
	    return this.getToken(SqlBaseParser.WITH, 0);
	};

	properties() {
	    return this.getTypedRuleContext(PropertiesContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterAnalyze(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitAnalyze(this);
		}
	}


}

SqlBaseParser.AnalyzeContext = AnalyzeContext;

class SetRoleContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.role = null;;
        super.copyFrom(ctx);
    }

	SET() {
	    return this.getToken(SqlBaseParser.SET, 0);
	};

	ROLE() {
	    return this.getToken(SqlBaseParser.ROLE, 0);
	};

	ALL() {
	    return this.getToken(SqlBaseParser.ALL, 0);
	};

	NONE() {
	    return this.getToken(SqlBaseParser.NONE, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSetRole(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSetRole(this);
		}
	}


}

SqlBaseParser.SetRoleContext = SetRoleContext;

class CreateFunctionContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.functionName = null;;
        this.returnType = null;;
        super.copyFrom(ctx);
    }

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	FUNCTION() {
	    return this.getToken(SqlBaseParser.FUNCTION, 0);
	};

	RETURNS() {
	    return this.getToken(SqlBaseParser.RETURNS, 0);
	};

	routineCharacteristics() {
	    return this.getTypedRuleContext(RoutineCharacteristicsContext,0);
	};

	routineBody() {
	    return this.getTypedRuleContext(RoutineBodyContext,0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	type() {
	    return this.getTypedRuleContext(TypeContext,0);
	};

	OR() {
	    return this.getToken(SqlBaseParser.OR, 0);
	};

	REPLACE() {
	    return this.getToken(SqlBaseParser.REPLACE, 0);
	};

	TEMPORARY() {
	    return this.getToken(SqlBaseParser.TEMPORARY, 0);
	};

	sqlParameterDeclaration = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(SqlParameterDeclarationContext);
	    } else {
	        return this.getTypedRuleContext(SqlParameterDeclarationContext,i);
	    }
	};

	COMMENT() {
	    return this.getToken(SqlBaseParser.COMMENT, 0);
	};

	string() {
	    return this.getTypedRuleContext(StringContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCreateFunction(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCreateFunction(this);
		}
	}


}

SqlBaseParser.CreateFunctionContext = CreateFunctionContext;

class ShowGrantsContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	GRANTS() {
	    return this.getToken(SqlBaseParser.GRANTS, 0);
	};

	ON() {
	    return this.getToken(SqlBaseParser.ON, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowGrants(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowGrants(this);
		}
	}


}

SqlBaseParser.ShowGrantsContext = ShowGrantsContext;

class DropSchemaContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DROP() {
	    return this.getToken(SqlBaseParser.DROP, 0);
	};

	SCHEMA() {
	    return this.getToken(SqlBaseParser.SCHEMA, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	IF() {
	    return this.getToken(SqlBaseParser.IF, 0);
	};

	EXISTS() {
	    return this.getToken(SqlBaseParser.EXISTS, 0);
	};

	CASCADE() {
	    return this.getToken(SqlBaseParser.CASCADE, 0);
	};

	RESTRICT() {
	    return this.getToken(SqlBaseParser.RESTRICT, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDropSchema(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDropSchema(this);
		}
	}


}

SqlBaseParser.DropSchemaContext = DropSchemaContext;

class ShowCreateViewContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	VIEW() {
	    return this.getToken(SqlBaseParser.VIEW, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowCreateView(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowCreateView(this);
		}
	}


}

SqlBaseParser.ShowCreateViewContext = ShowCreateViewContext;

class CreateTableContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	tableElement = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(TableElementContext);
	    } else {
	        return this.getTypedRuleContext(TableElementContext,i);
	    }
	};

	IF() {
	    return this.getToken(SqlBaseParser.IF, 0);
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	EXISTS() {
	    return this.getToken(SqlBaseParser.EXISTS, 0);
	};

	COMMENT() {
	    return this.getToken(SqlBaseParser.COMMENT, 0);
	};

	string() {
	    return this.getTypedRuleContext(StringContext,0);
	};

	WITH() {
	    return this.getToken(SqlBaseParser.WITH, 0);
	};

	properties() {
	    return this.getTypedRuleContext(PropertiesContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCreateTable(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCreateTable(this);
		}
	}


}

SqlBaseParser.CreateTableContext = CreateTableContext;

class StartTransactionContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	START() {
	    return this.getToken(SqlBaseParser.START, 0);
	};

	TRANSACTION() {
	    return this.getToken(SqlBaseParser.TRANSACTION, 0);
	};

	transactionMode = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(TransactionModeContext);
	    } else {
	        return this.getTypedRuleContext(TransactionModeContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterStartTransaction(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitStartTransaction(this);
		}
	}


}

SqlBaseParser.StartTransactionContext = StartTransactionContext;

class CreateTableAsSelectContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	AS() {
	    return this.getToken(SqlBaseParser.AS, 0);
	};

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	IF() {
	    return this.getToken(SqlBaseParser.IF, 0);
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	EXISTS() {
	    return this.getToken(SqlBaseParser.EXISTS, 0);
	};

	columnAliases() {
	    return this.getTypedRuleContext(ColumnAliasesContext,0);
	};

	COMMENT() {
	    return this.getToken(SqlBaseParser.COMMENT, 0);
	};

	string() {
	    return this.getTypedRuleContext(StringContext,0);
	};

	WITH = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.WITH);
	    } else {
	        return this.getToken(SqlBaseParser.WITH, i);
	    }
	};


	properties() {
	    return this.getTypedRuleContext(PropertiesContext,0);
	};

	DATA() {
	    return this.getToken(SqlBaseParser.DATA, 0);
	};

	NO() {
	    return this.getToken(SqlBaseParser.NO, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCreateTableAsSelect(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCreateTableAsSelect(this);
		}
	}


}

SqlBaseParser.CreateTableAsSelectContext = CreateTableAsSelectContext;

class ShowStatsContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	STATS() {
	    return this.getToken(SqlBaseParser.STATS, 0);
	};

	FOR() {
	    return this.getToken(SqlBaseParser.FOR, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowStats(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowStats(this);
		}
	}


}

SqlBaseParser.ShowStatsContext = ShowStatsContext;

class DropFunctionContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DROP() {
	    return this.getToken(SqlBaseParser.DROP, 0);
	};

	FUNCTION() {
	    return this.getToken(SqlBaseParser.FUNCTION, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	TEMPORARY() {
	    return this.getToken(SqlBaseParser.TEMPORARY, 0);
	};

	IF() {
	    return this.getToken(SqlBaseParser.IF, 0);
	};

	EXISTS() {
	    return this.getToken(SqlBaseParser.EXISTS, 0);
	};

	types() {
	    return this.getTypedRuleContext(TypesContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDropFunction(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDropFunction(this);
		}
	}


}

SqlBaseParser.DropFunctionContext = DropFunctionContext;

class RevokeContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.grantee = null;;
        super.copyFrom(ctx);
    }

	REVOKE() {
	    return this.getToken(SqlBaseParser.REVOKE, 0);
	};

	ON() {
	    return this.getToken(SqlBaseParser.ON, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	principal() {
	    return this.getTypedRuleContext(PrincipalContext,0);
	};

	privilege = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(PrivilegeContext);
	    } else {
	        return this.getTypedRuleContext(PrivilegeContext,i);
	    }
	};

	ALL() {
	    return this.getToken(SqlBaseParser.ALL, 0);
	};

	PRIVILEGES() {
	    return this.getToken(SqlBaseParser.PRIVILEGES, 0);
	};

	GRANT() {
	    return this.getToken(SqlBaseParser.GRANT, 0);
	};

	OPTION() {
	    return this.getToken(SqlBaseParser.OPTION, 0);
	};

	FOR() {
	    return this.getToken(SqlBaseParser.FOR, 0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRevoke(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRevoke(this);
		}
	}


}

SqlBaseParser.RevokeContext = RevokeContext;

class UpdateContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.where = null;;
        super.copyFrom(ctx);
    }

	UPDATE() {
	    return this.getToken(SqlBaseParser.UPDATE, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	SET() {
	    return this.getToken(SqlBaseParser.SET, 0);
	};

	updateAssignment = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(UpdateAssignmentContext);
	    } else {
	        return this.getTypedRuleContext(UpdateAssignmentContext,i);
	    }
	};

	WHERE() {
	    return this.getToken(SqlBaseParser.WHERE, 0);
	};

	booleanExpression() {
	    return this.getTypedRuleContext(BooleanExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterUpdate(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitUpdate(this);
		}
	}


}

SqlBaseParser.UpdateContext = UpdateContext;

class CreateTypeContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	TYPE() {
	    return this.getToken(SqlBaseParser.TYPE, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	AS() {
	    return this.getToken(SqlBaseParser.AS, 0);
	};

	sqlParameterDeclaration = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(SqlParameterDeclarationContext);
	    } else {
	        return this.getTypedRuleContext(SqlParameterDeclarationContext,i);
	    }
	};

	type() {
	    return this.getTypedRuleContext(TypeContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCreateType(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCreateType(this);
		}
	}


}

SqlBaseParser.CreateTypeContext = CreateTypeContext;

class DeleteContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DELETE() {
	    return this.getToken(SqlBaseParser.DELETE, 0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	WHERE() {
	    return this.getToken(SqlBaseParser.WHERE, 0);
	};

	booleanExpression() {
	    return this.getTypedRuleContext(BooleanExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDelete(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDelete(this);
		}
	}


}

SqlBaseParser.DeleteContext = DeleteContext;

class DescribeInputContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DESCRIBE() {
	    return this.getToken(SqlBaseParser.DESCRIBE, 0);
	};

	INPUT() {
	    return this.getToken(SqlBaseParser.INPUT, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDescribeInput(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDescribeInput(this);
		}
	}


}

SqlBaseParser.DescribeInputContext = DescribeInputContext;

class ShowStatsForQueryContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	STATS() {
	    return this.getToken(SqlBaseParser.STATS, 0);
	};

	FOR() {
	    return this.getToken(SqlBaseParser.FOR, 0);
	};

	querySpecification() {
	    return this.getTypedRuleContext(QuerySpecificationContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowStatsForQuery(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowStatsForQuery(this);
		}
	}


}

SqlBaseParser.ShowStatsForQueryContext = ShowStatsForQueryContext;

class StatementDefaultContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterStatementDefault(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitStatementDefault(this);
		}
	}


}

SqlBaseParser.StatementDefaultContext = StatementDefaultContext;

class TruncateTableContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	TRUNCATE() {
	    return this.getToken(SqlBaseParser.TRUNCATE, 0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterTruncateTable(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitTruncateTable(this);
		}
	}


}

SqlBaseParser.TruncateTableContext = TruncateTableContext;

class CreateMaterializedViewContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	MATERIALIZED() {
	    return this.getToken(SqlBaseParser.MATERIALIZED, 0);
	};

	VIEW() {
	    return this.getToken(SqlBaseParser.VIEW, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	AS() {
	    return this.getToken(SqlBaseParser.AS, 0);
	};

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	IF() {
	    return this.getToken(SqlBaseParser.IF, 0);
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	EXISTS() {
	    return this.getToken(SqlBaseParser.EXISTS, 0);
	};

	COMMENT() {
	    return this.getToken(SqlBaseParser.COMMENT, 0);
	};

	string() {
	    return this.getTypedRuleContext(StringContext,0);
	};

	WITH() {
	    return this.getToken(SqlBaseParser.WITH, 0);
	};

	properties() {
	    return this.getTypedRuleContext(PropertiesContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCreateMaterializedView(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCreateMaterializedView(this);
		}
	}


}

SqlBaseParser.CreateMaterializedViewContext = CreateMaterializedViewContext;

class AlterFunctionContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	ALTER() {
	    return this.getToken(SqlBaseParser.ALTER, 0);
	};

	FUNCTION() {
	    return this.getToken(SqlBaseParser.FUNCTION, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	alterRoutineCharacteristics() {
	    return this.getTypedRuleContext(AlterRoutineCharacteristicsContext,0);
	};

	types() {
	    return this.getTypedRuleContext(TypesContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterAlterFunction(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitAlterFunction(this);
		}
	}


}

SqlBaseParser.AlterFunctionContext = AlterFunctionContext;

class SetSessionContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SET() {
	    return this.getToken(SqlBaseParser.SET, 0);
	};

	SESSION() {
	    return this.getToken(SqlBaseParser.SESSION, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	EQ() {
	    return this.getToken(SqlBaseParser.EQ, 0);
	};

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSetSession(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSetSession(this);
		}
	}


}

SqlBaseParser.SetSessionContext = SetSessionContext;

class CreateViewContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	VIEW() {
	    return this.getToken(SqlBaseParser.VIEW, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	AS() {
	    return this.getToken(SqlBaseParser.AS, 0);
	};

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	OR() {
	    return this.getToken(SqlBaseParser.OR, 0);
	};

	REPLACE() {
	    return this.getToken(SqlBaseParser.REPLACE, 0);
	};

	SECURITY() {
	    return this.getToken(SqlBaseParser.SECURITY, 0);
	};

	DEFINER() {
	    return this.getToken(SqlBaseParser.DEFINER, 0);
	};

	INVOKER() {
	    return this.getToken(SqlBaseParser.INVOKER, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCreateView(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCreateView(this);
		}
	}


}

SqlBaseParser.CreateViewContext = CreateViewContext;

class ShowSchemasContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.pattern = null;;
        this.escape = null;;
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	SCHEMAS() {
	    return this.getToken(SqlBaseParser.SCHEMAS, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	LIKE() {
	    return this.getToken(SqlBaseParser.LIKE, 0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	IN() {
	    return this.getToken(SqlBaseParser.IN, 0);
	};

	string = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(StringContext);
	    } else {
	        return this.getTypedRuleContext(StringContext,i);
	    }
	};

	ESCAPE() {
	    return this.getToken(SqlBaseParser.ESCAPE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowSchemas(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowSchemas(this);
		}
	}


}

SqlBaseParser.ShowSchemasContext = ShowSchemasContext;

class DropTableContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DROP() {
	    return this.getToken(SqlBaseParser.DROP, 0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	IF() {
	    return this.getToken(SqlBaseParser.IF, 0);
	};

	EXISTS() {
	    return this.getToken(SqlBaseParser.EXISTS, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDropTable(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDropTable(this);
		}
	}


}

SqlBaseParser.DropTableContext = DropTableContext;

class RollbackContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	ROLLBACK() {
	    return this.getToken(SqlBaseParser.ROLLBACK, 0);
	};

	WORK() {
	    return this.getToken(SqlBaseParser.WORK, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRollback(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRollback(this);
		}
	}


}

SqlBaseParser.RollbackContext = RollbackContext;

class GrantRolesContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	GRANT() {
	    return this.getToken(SqlBaseParser.GRANT, 0);
	};

	roles() {
	    return this.getTypedRuleContext(RolesContext,0);
	};

	TO() {
	    return this.getToken(SqlBaseParser.TO, 0);
	};

	principal = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(PrincipalContext);
	    } else {
	        return this.getTypedRuleContext(PrincipalContext,i);
	    }
	};

	WITH() {
	    return this.getToken(SqlBaseParser.WITH, 0);
	};

	ADMIN() {
	    return this.getToken(SqlBaseParser.ADMIN, 0);
	};

	OPTION() {
	    return this.getToken(SqlBaseParser.OPTION, 0);
	};

	GRANTED() {
	    return this.getToken(SqlBaseParser.GRANTED, 0);
	};

	BY() {
	    return this.getToken(SqlBaseParser.BY, 0);
	};

	grantor() {
	    return this.getTypedRuleContext(GrantorContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterGrantRoles(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitGrantRoles(this);
		}
	}


}

SqlBaseParser.GrantRolesContext = GrantRolesContext;

class CallContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CALL() {
	    return this.getToken(SqlBaseParser.CALL, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	callArgument = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(CallArgumentContext);
	    } else {
	        return this.getTypedRuleContext(CallArgumentContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCall(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCall(this);
		}
	}


}

SqlBaseParser.CallContext = CallContext;

class RefreshMaterializedViewContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	REFRESH() {
	    return this.getToken(SqlBaseParser.REFRESH, 0);
	};

	MATERIALIZED() {
	    return this.getToken(SqlBaseParser.MATERIALIZED, 0);
	};

	VIEW() {
	    return this.getToken(SqlBaseParser.VIEW, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	WHERE() {
	    return this.getToken(SqlBaseParser.WHERE, 0);
	};

	booleanExpression() {
	    return this.getTypedRuleContext(BooleanExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRefreshMaterializedView(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRefreshMaterializedView(this);
		}
	}


}

SqlBaseParser.RefreshMaterializedViewContext = RefreshMaterializedViewContext;

class ShowCreateMaterializedViewContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	CREATE() {
	    return this.getToken(SqlBaseParser.CREATE, 0);
	};

	MATERIALIZED() {
	    return this.getToken(SqlBaseParser.MATERIALIZED, 0);
	};

	VIEW() {
	    return this.getToken(SqlBaseParser.VIEW, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowCreateMaterializedView(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowCreateMaterializedView(this);
		}
	}


}

SqlBaseParser.ShowCreateMaterializedViewContext = ShowCreateMaterializedViewContext;

class ShowFunctionsContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.pattern = null;;
        this.escape = null;;
        super.copyFrom(ctx);
    }

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	FUNCTIONS() {
	    return this.getToken(SqlBaseParser.FUNCTIONS, 0);
	};

	LIKE() {
	    return this.getToken(SqlBaseParser.LIKE, 0);
	};

	string = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(StringContext);
	    } else {
	        return this.getTypedRuleContext(StringContext,i);
	    }
	};

	ESCAPE() {
	    return this.getToken(SqlBaseParser.ESCAPE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterShowFunctions(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitShowFunctions(this);
		}
	}


}

SqlBaseParser.ShowFunctionsContext = ShowFunctionsContext;

class DescribeOutputContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DESCRIBE() {
	    return this.getToken(SqlBaseParser.DESCRIBE, 0);
	};

	OUTPUT() {
	    return this.getToken(SqlBaseParser.OUTPUT, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDescribeOutput(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDescribeOutput(this);
		}
	}


}

SqlBaseParser.DescribeOutputContext = DescribeOutputContext;

class GrantContext extends StatementContext {

    constructor(parser, ctx) {
        super(parser);
        this.grantee = null;;
        super.copyFrom(ctx);
    }

	GRANT = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.GRANT);
	    } else {
	        return this.getToken(SqlBaseParser.GRANT, i);
	    }
	};


	ON() {
	    return this.getToken(SqlBaseParser.ON, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	TO() {
	    return this.getToken(SqlBaseParser.TO, 0);
	};

	principal() {
	    return this.getTypedRuleContext(PrincipalContext,0);
	};

	privilege = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(PrivilegeContext);
	    } else {
	        return this.getTypedRuleContext(PrivilegeContext,i);
	    }
	};

	ALL() {
	    return this.getToken(SqlBaseParser.ALL, 0);
	};

	PRIVILEGES() {
	    return this.getToken(SqlBaseParser.PRIVILEGES, 0);
	};

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	WITH() {
	    return this.getToken(SqlBaseParser.WITH, 0);
	};

	OPTION() {
	    return this.getToken(SqlBaseParser.OPTION, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterGrant(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitGrant(this);
		}
	}


}

SqlBaseParser.GrantContext = GrantContext;

class QueryContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_query;
    }

	queryNoWith() {
	    return this.getTypedRuleContext(QueryNoWithContext,0);
	};

	with_() {
	    return this.getTypedRuleContext(WithContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterQuery(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitQuery(this);
		}
	}


}



class WithContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_with;
    }

	WITH() {
	    return this.getToken(SqlBaseParser.WITH, 0);
	};

	namedQuery = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(NamedQueryContext);
	    } else {
	        return this.getTypedRuleContext(NamedQueryContext,i);
	    }
	};

	RECURSIVE() {
	    return this.getToken(SqlBaseParser.RECURSIVE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterWith(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitWith(this);
		}
	}


}



class TableElementContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_tableElement;
    }

	columnDefinition() {
	    return this.getTypedRuleContext(ColumnDefinitionContext,0);
	};

	likeClause() {
	    return this.getTypedRuleContext(LikeClauseContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterTableElement(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitTableElement(this);
		}
	}


}



class ColumnDefinitionContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_columnDefinition;
    }

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	type() {
	    return this.getTypedRuleContext(TypeContext,0);
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	NULL() {
	    return this.getToken(SqlBaseParser.NULL, 0);
	};

	COMMENT() {
	    return this.getToken(SqlBaseParser.COMMENT, 0);
	};

	string() {
	    return this.getTypedRuleContext(StringContext,0);
	};

	WITH() {
	    return this.getToken(SqlBaseParser.WITH, 0);
	};

	properties() {
	    return this.getTypedRuleContext(PropertiesContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterColumnDefinition(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitColumnDefinition(this);
		}
	}


}



class LikeClauseContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_likeClause;
        this.optionType = null;
    }

	LIKE() {
	    return this.getToken(SqlBaseParser.LIKE, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	PROPERTIES() {
	    return this.getToken(SqlBaseParser.PROPERTIES, 0);
	};

	INCLUDING() {
	    return this.getToken(SqlBaseParser.INCLUDING, 0);
	};

	EXCLUDING() {
	    return this.getToken(SqlBaseParser.EXCLUDING, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterLikeClause(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitLikeClause(this);
		}
	}


}



class PropertiesContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_properties;
    }

	property = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(PropertyContext);
	    } else {
	        return this.getTypedRuleContext(PropertyContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterProperties(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitProperties(this);
		}
	}


}



class PropertyContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_property;
    }

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	EQ() {
	    return this.getToken(SqlBaseParser.EQ, 0);
	};

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterProperty(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitProperty(this);
		}
	}


}



class SqlParameterDeclarationContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_sqlParameterDeclaration;
    }

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	type() {
	    return this.getTypedRuleContext(TypeContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSqlParameterDeclaration(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSqlParameterDeclaration(this);
		}
	}


}



class RoutineCharacteristicsContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_routineCharacteristics;
    }

	routineCharacteristic = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(RoutineCharacteristicContext);
	    } else {
	        return this.getTypedRuleContext(RoutineCharacteristicContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRoutineCharacteristics(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRoutineCharacteristics(this);
		}
	}


}



class RoutineCharacteristicContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_routineCharacteristic;
    }

	LANGUAGE() {
	    return this.getToken(SqlBaseParser.LANGUAGE, 0);
	};

	language() {
	    return this.getTypedRuleContext(LanguageContext,0);
	};

	determinism() {
	    return this.getTypedRuleContext(DeterminismContext,0);
	};

	nullCallClause() {
	    return this.getTypedRuleContext(NullCallClauseContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRoutineCharacteristic(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRoutineCharacteristic(this);
		}
	}


}



class AlterRoutineCharacteristicsContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_alterRoutineCharacteristics;
    }

	alterRoutineCharacteristic = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(AlterRoutineCharacteristicContext);
	    } else {
	        return this.getTypedRuleContext(AlterRoutineCharacteristicContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterAlterRoutineCharacteristics(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitAlterRoutineCharacteristics(this);
		}
	}


}



class AlterRoutineCharacteristicContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_alterRoutineCharacteristic;
    }

	nullCallClause() {
	    return this.getTypedRuleContext(NullCallClauseContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterAlterRoutineCharacteristic(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitAlterRoutineCharacteristic(this);
		}
	}


}



class RoutineBodyContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_routineBody;
    }

	returnStatement() {
	    return this.getTypedRuleContext(ReturnStatementContext,0);
	};

	externalBodyReference() {
	    return this.getTypedRuleContext(ExternalBodyReferenceContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRoutineBody(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRoutineBody(this);
		}
	}


}



class ReturnStatementContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_returnStatement;
    }

	RETURN() {
	    return this.getToken(SqlBaseParser.RETURN, 0);
	};

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterReturnStatement(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitReturnStatement(this);
		}
	}


}



class ExternalBodyReferenceContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_externalBodyReference;
    }

	EXTERNAL() {
	    return this.getToken(SqlBaseParser.EXTERNAL, 0);
	};

	NAME() {
	    return this.getToken(SqlBaseParser.NAME, 0);
	};

	externalRoutineName() {
	    return this.getTypedRuleContext(ExternalRoutineNameContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterExternalBodyReference(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitExternalBodyReference(this);
		}
	}


}



class LanguageContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_language;
    }

	SQL() {
	    return this.getToken(SqlBaseParser.SQL, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterLanguage(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitLanguage(this);
		}
	}


}



class DeterminismContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_determinism;
    }

	DETERMINISTIC() {
	    return this.getToken(SqlBaseParser.DETERMINISTIC, 0);
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDeterminism(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDeterminism(this);
		}
	}


}



class NullCallClauseContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_nullCallClause;
    }

	RETURNS() {
	    return this.getToken(SqlBaseParser.RETURNS, 0);
	};

	NULL = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.NULL);
	    } else {
	        return this.getToken(SqlBaseParser.NULL, i);
	    }
	};


	ON() {
	    return this.getToken(SqlBaseParser.ON, 0);
	};

	INPUT() {
	    return this.getToken(SqlBaseParser.INPUT, 0);
	};

	CALLED() {
	    return this.getToken(SqlBaseParser.CALLED, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterNullCallClause(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitNullCallClause(this);
		}
	}


}



class ExternalRoutineNameContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_externalRoutineName;
    }

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterExternalRoutineName(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitExternalRoutineName(this);
		}
	}


}



class QueryNoWithContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_queryNoWith;
        this.offset = null;
        this.limit = null;
        this.fetchFirstNRows = null;
    }

	queryTerm() {
	    return this.getTypedRuleContext(QueryTermContext,0);
	};

	ORDER() {
	    return this.getToken(SqlBaseParser.ORDER, 0);
	};

	BY() {
	    return this.getToken(SqlBaseParser.BY, 0);
	};

	sortItem = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(SortItemContext);
	    } else {
	        return this.getTypedRuleContext(SortItemContext,i);
	    }
	};

	OFFSET() {
	    return this.getToken(SqlBaseParser.OFFSET, 0);
	};

	INTEGER_VALUE = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.INTEGER_VALUE);
	    } else {
	        return this.getToken(SqlBaseParser.INTEGER_VALUE, i);
	    }
	};


	LIMIT() {
	    return this.getToken(SqlBaseParser.LIMIT, 0);
	};

	ROW() {
	    return this.getToken(SqlBaseParser.ROW, 0);
	};

	ROWS = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.ROWS);
	    } else {
	        return this.getToken(SqlBaseParser.ROWS, i);
	    }
	};


	ALL() {
	    return this.getToken(SqlBaseParser.ALL, 0);
	};

	FETCH() {
	    return this.getToken(SqlBaseParser.FETCH, 0);
	};

	FIRST() {
	    return this.getToken(SqlBaseParser.FIRST, 0);
	};

	ONLY() {
	    return this.getToken(SqlBaseParser.ONLY, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterQueryNoWith(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitQueryNoWith(this);
		}
	}


}



class QueryTermContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_queryTerm;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class QueryTermDefaultContext extends QueryTermContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	queryPrimary() {
	    return this.getTypedRuleContext(QueryPrimaryContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterQueryTermDefault(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitQueryTermDefault(this);
		}
	}


}

SqlBaseParser.QueryTermDefaultContext = QueryTermDefaultContext;

class SetOperationContext extends QueryTermContext {

    constructor(parser, ctx) {
        super(parser);
        this.left = null;;
        this.operator = null;;
        this.right = null;;
        super.copyFrom(ctx);
    }

	queryTerm = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(QueryTermContext);
	    } else {
	        return this.getTypedRuleContext(QueryTermContext,i);
	    }
	};

	INTERSECT() {
	    return this.getToken(SqlBaseParser.INTERSECT, 0);
	};

	setQuantifier() {
	    return this.getTypedRuleContext(SetQuantifierContext,0);
	};

	UNION() {
	    return this.getToken(SqlBaseParser.UNION, 0);
	};

	EXCEPT() {
	    return this.getToken(SqlBaseParser.EXCEPT, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSetOperation(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSetOperation(this);
		}
	}


}

SqlBaseParser.SetOperationContext = SetOperationContext;

class QueryPrimaryContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_queryPrimary;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class SubqueryContext extends QueryPrimaryContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	queryNoWith() {
	    return this.getTypedRuleContext(QueryNoWithContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSubquery(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSubquery(this);
		}
	}


}

SqlBaseParser.SubqueryContext = SubqueryContext;

class QueryPrimaryDefaultContext extends QueryPrimaryContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	querySpecification() {
	    return this.getTypedRuleContext(QuerySpecificationContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterQueryPrimaryDefault(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitQueryPrimaryDefault(this);
		}
	}


}

SqlBaseParser.QueryPrimaryDefaultContext = QueryPrimaryDefaultContext;

class TableContext extends QueryPrimaryContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	TABLE() {
	    return this.getToken(SqlBaseParser.TABLE, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterTable(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitTable(this);
		}
	}


}

SqlBaseParser.TableContext = TableContext;

class InlineTableContext extends QueryPrimaryContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	VALUES() {
	    return this.getToken(SqlBaseParser.VALUES, 0);
	};

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterInlineTable(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitInlineTable(this);
		}
	}


}

SqlBaseParser.InlineTableContext = InlineTableContext;

class SortItemContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_sortItem;
        this.ordering = null;
        this.nullOrdering = null;
    }

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	NULLS() {
	    return this.getToken(SqlBaseParser.NULLS, 0);
	};

	ASC() {
	    return this.getToken(SqlBaseParser.ASC, 0);
	};

	DESC() {
	    return this.getToken(SqlBaseParser.DESC, 0);
	};

	FIRST() {
	    return this.getToken(SqlBaseParser.FIRST, 0);
	};

	LAST() {
	    return this.getToken(SqlBaseParser.LAST, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSortItem(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSortItem(this);
		}
	}


}



class QuerySpecificationContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_querySpecification;
        this.where = null;
        this.having = null;
    }

	SELECT() {
	    return this.getToken(SqlBaseParser.SELECT, 0);
	};

	selectItem = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(SelectItemContext);
	    } else {
	        return this.getTypedRuleContext(SelectItemContext,i);
	    }
	};

	setQuantifier() {
	    return this.getTypedRuleContext(SetQuantifierContext,0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	relation = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(RelationContext);
	    } else {
	        return this.getTypedRuleContext(RelationContext,i);
	    }
	};

	WHERE() {
	    return this.getToken(SqlBaseParser.WHERE, 0);
	};

	GROUP() {
	    return this.getToken(SqlBaseParser.GROUP, 0);
	};

	BY() {
	    return this.getToken(SqlBaseParser.BY, 0);
	};

	groupBy() {
	    return this.getTypedRuleContext(GroupByContext,0);
	};

	HAVING() {
	    return this.getToken(SqlBaseParser.HAVING, 0);
	};

	booleanExpression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(BooleanExpressionContext);
	    } else {
	        return this.getTypedRuleContext(BooleanExpressionContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterQuerySpecification(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitQuerySpecification(this);
		}
	}


}



class GroupByContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_groupBy;
    }

	groupingElement = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(GroupingElementContext);
	    } else {
	        return this.getTypedRuleContext(GroupingElementContext,i);
	    }
	};

	setQuantifier() {
	    return this.getTypedRuleContext(SetQuantifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterGroupBy(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitGroupBy(this);
		}
	}


}



class GroupingElementContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_groupingElement;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class MultipleGroupingSetsContext extends GroupingElementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	GROUPING() {
	    return this.getToken(SqlBaseParser.GROUPING, 0);
	};

	SETS() {
	    return this.getToken(SqlBaseParser.SETS, 0);
	};

	groupingSet = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(GroupingSetContext);
	    } else {
	        return this.getTypedRuleContext(GroupingSetContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterMultipleGroupingSets(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitMultipleGroupingSets(this);
		}
	}


}

SqlBaseParser.MultipleGroupingSetsContext = MultipleGroupingSetsContext;

class SingleGroupingSetContext extends GroupingElementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	groupingSet() {
	    return this.getTypedRuleContext(GroupingSetContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSingleGroupingSet(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSingleGroupingSet(this);
		}
	}


}

SqlBaseParser.SingleGroupingSetContext = SingleGroupingSetContext;

class CubeContext extends GroupingElementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CUBE() {
	    return this.getToken(SqlBaseParser.CUBE, 0);
	};

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCube(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCube(this);
		}
	}


}

SqlBaseParser.CubeContext = CubeContext;

class RollupContext extends GroupingElementContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	ROLLUP() {
	    return this.getToken(SqlBaseParser.ROLLUP, 0);
	};

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRollup(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRollup(this);
		}
	}


}

SqlBaseParser.RollupContext = RollupContext;

class GroupingSetContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_groupingSet;
    }

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterGroupingSet(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitGroupingSet(this);
		}
	}


}



class NamedQueryContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_namedQuery;
        this.name = null;
    }

	AS() {
	    return this.getToken(SqlBaseParser.AS, 0);
	};

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	columnAliases() {
	    return this.getTypedRuleContext(ColumnAliasesContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterNamedQuery(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitNamedQuery(this);
		}
	}


}



class SetQuantifierContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_setQuantifier;
    }

	DISTINCT() {
	    return this.getToken(SqlBaseParser.DISTINCT, 0);
	};

	ALL() {
	    return this.getToken(SqlBaseParser.ALL, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSetQuantifier(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSetQuantifier(this);
		}
	}


}



class SelectItemContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_selectItem;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class SelectAllContext extends SelectItemContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	ASTERISK() {
	    return this.getToken(SqlBaseParser.ASTERISK, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSelectAll(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSelectAll(this);
		}
	}


}

SqlBaseParser.SelectAllContext = SelectAllContext;

class SelectSingleContext extends SelectItemContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	AS() {
	    return this.getToken(SqlBaseParser.AS, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSelectSingle(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSelectSingle(this);
		}
	}


}

SqlBaseParser.SelectSingleContext = SelectSingleContext;

class RelationContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_relation;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class RelationDefaultContext extends RelationContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	sampledRelation() {
	    return this.getTypedRuleContext(SampledRelationContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRelationDefault(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRelationDefault(this);
		}
	}


}

SqlBaseParser.RelationDefaultContext = RelationDefaultContext;

class JoinRelationContext extends RelationContext {

    constructor(parser, ctx) {
        super(parser);
        this.left = null;;
        this.right = null;;
        this.rightRelation = null;;
        super.copyFrom(ctx);
    }

	relation = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(RelationContext);
	    } else {
	        return this.getTypedRuleContext(RelationContext,i);
	    }
	};

	CROSS() {
	    return this.getToken(SqlBaseParser.CROSS, 0);
	};

	JOIN() {
	    return this.getToken(SqlBaseParser.JOIN, 0);
	};

	joinType() {
	    return this.getTypedRuleContext(JoinTypeContext,0);
	};

	joinCriteria() {
	    return this.getTypedRuleContext(JoinCriteriaContext,0);
	};

	NATURAL() {
	    return this.getToken(SqlBaseParser.NATURAL, 0);
	};

	sampledRelation() {
	    return this.getTypedRuleContext(SampledRelationContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterJoinRelation(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitJoinRelation(this);
		}
	}


}

SqlBaseParser.JoinRelationContext = JoinRelationContext;

class JoinTypeContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_joinType;
    }

	INNER() {
	    return this.getToken(SqlBaseParser.INNER, 0);
	};

	LEFT() {
	    return this.getToken(SqlBaseParser.LEFT, 0);
	};

	OUTER() {
	    return this.getToken(SqlBaseParser.OUTER, 0);
	};

	RIGHT() {
	    return this.getToken(SqlBaseParser.RIGHT, 0);
	};

	FULL() {
	    return this.getToken(SqlBaseParser.FULL, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterJoinType(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitJoinType(this);
		}
	}


}



class JoinCriteriaContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_joinCriteria;
    }

	ON() {
	    return this.getToken(SqlBaseParser.ON, 0);
	};

	booleanExpression() {
	    return this.getTypedRuleContext(BooleanExpressionContext,0);
	};

	USING() {
	    return this.getToken(SqlBaseParser.USING, 0);
	};

	identifier = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(IdentifierContext);
	    } else {
	        return this.getTypedRuleContext(IdentifierContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterJoinCriteria(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitJoinCriteria(this);
		}
	}


}



class SampledRelationContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_sampledRelation;
        this.percentage = null;
    }

	aliasedRelation() {
	    return this.getTypedRuleContext(AliasedRelationContext,0);
	};

	TABLESAMPLE() {
	    return this.getToken(SqlBaseParser.TABLESAMPLE, 0);
	};

	sampleType() {
	    return this.getTypedRuleContext(SampleTypeContext,0);
	};

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSampledRelation(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSampledRelation(this);
		}
	}


}



class SampleTypeContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_sampleType;
    }

	BERNOULLI() {
	    return this.getToken(SqlBaseParser.BERNOULLI, 0);
	};

	SYSTEM() {
	    return this.getToken(SqlBaseParser.SYSTEM, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSampleType(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSampleType(this);
		}
	}


}



class AliasedRelationContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_aliasedRelation;
    }

	relationPrimary() {
	    return this.getTypedRuleContext(RelationPrimaryContext,0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	AS() {
	    return this.getToken(SqlBaseParser.AS, 0);
	};

	columnAliases() {
	    return this.getTypedRuleContext(ColumnAliasesContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterAliasedRelation(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitAliasedRelation(this);
		}
	}


}



class ColumnAliasesContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_columnAliases;
    }

	identifier = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(IdentifierContext);
	    } else {
	        return this.getTypedRuleContext(IdentifierContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterColumnAliases(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitColumnAliases(this);
		}
	}


}



class RelationPrimaryContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_relationPrimary;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class SubqueryRelationContext extends RelationPrimaryContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSubqueryRelation(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSubqueryRelation(this);
		}
	}


}

SqlBaseParser.SubqueryRelationContext = SubqueryRelationContext;

class ParenthesizedRelationContext extends RelationPrimaryContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	relation() {
	    return this.getTypedRuleContext(RelationContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterParenthesizedRelation(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitParenthesizedRelation(this);
		}
	}


}

SqlBaseParser.ParenthesizedRelationContext = ParenthesizedRelationContext;

class UnnestContext extends RelationPrimaryContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	UNNEST() {
	    return this.getToken(SqlBaseParser.UNNEST, 0);
	};

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	WITH() {
	    return this.getToken(SqlBaseParser.WITH, 0);
	};

	ORDINALITY() {
	    return this.getToken(SqlBaseParser.ORDINALITY, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterUnnest(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitUnnest(this);
		}
	}


}

SqlBaseParser.UnnestContext = UnnestContext;

class LateralContext extends RelationPrimaryContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	LATERAL() {
	    return this.getToken(SqlBaseParser.LATERAL, 0);
	};

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterLateral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitLateral(this);
		}
	}


}

SqlBaseParser.LateralContext = LateralContext;

class TableNameContext extends RelationPrimaryContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	tableVersionExpression() {
	    return this.getTypedRuleContext(TableVersionExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterTableName(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitTableName(this);
		}
	}


}

SqlBaseParser.TableNameContext = TableNameContext;

class ExpressionContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_expression;
    }

	booleanExpression() {
	    return this.getTypedRuleContext(BooleanExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterExpression(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitExpression(this);
		}
	}


}



class BooleanExpressionContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_booleanExpression;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class LogicalNotContext extends BooleanExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	booleanExpression() {
	    return this.getTypedRuleContext(BooleanExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterLogicalNot(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitLogicalNot(this);
		}
	}


}

SqlBaseParser.LogicalNotContext = LogicalNotContext;

class PredicatedContext extends BooleanExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this._valueExpression = null;;
        super.copyFrom(ctx);
    }

	valueExpression() {
	    return this.getTypedRuleContext(ValueExpressionContext,0);
	};

	predicate() {
	    return this.getTypedRuleContext(PredicateContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterPredicated(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitPredicated(this);
		}
	}


}

SqlBaseParser.PredicatedContext = PredicatedContext;

class LogicalBinaryContext extends BooleanExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this.left = null;;
        this.operator = null;;
        this.right = null;;
        super.copyFrom(ctx);
    }

	booleanExpression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(BooleanExpressionContext);
	    } else {
	        return this.getTypedRuleContext(BooleanExpressionContext,i);
	    }
	};

	AND() {
	    return this.getToken(SqlBaseParser.AND, 0);
	};

	OR() {
	    return this.getToken(SqlBaseParser.OR, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterLogicalBinary(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitLogicalBinary(this);
		}
	}


}

SqlBaseParser.LogicalBinaryContext = LogicalBinaryContext;

class PredicateContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState, value) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_predicate;
        this.value = null
        this.value = value || null;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
			this.value = ctx.value;
		}

}


class ComparisonContext extends PredicateContext {

    constructor(parser, ctx) {
        super(parser);
        this.right = null;;
        super.copyFrom(ctx);
    }

	comparisonOperator() {
	    return this.getTypedRuleContext(ComparisonOperatorContext,0);
	};

	valueExpression() {
	    return this.getTypedRuleContext(ValueExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterComparison(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitComparison(this);
		}
	}


}

SqlBaseParser.ComparisonContext = ComparisonContext;

class LikeContext extends PredicateContext {

    constructor(parser, ctx) {
        super(parser);
        this.pattern = null;;
        this.escape = null;;
        super.copyFrom(ctx);
    }

	LIKE() {
	    return this.getToken(SqlBaseParser.LIKE, 0);
	};

	valueExpression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ValueExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ValueExpressionContext,i);
	    }
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	ESCAPE() {
	    return this.getToken(SqlBaseParser.ESCAPE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterLike(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitLike(this);
		}
	}


}

SqlBaseParser.LikeContext = LikeContext;

class InSubqueryContext extends PredicateContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	IN() {
	    return this.getToken(SqlBaseParser.IN, 0);
	};

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterInSubquery(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitInSubquery(this);
		}
	}


}

SqlBaseParser.InSubqueryContext = InSubqueryContext;

class DistinctFromContext extends PredicateContext {

    constructor(parser, ctx) {
        super(parser);
        this.right = null;;
        super.copyFrom(ctx);
    }

	IS() {
	    return this.getToken(SqlBaseParser.IS, 0);
	};

	DISTINCT() {
	    return this.getToken(SqlBaseParser.DISTINCT, 0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	valueExpression() {
	    return this.getTypedRuleContext(ValueExpressionContext,0);
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDistinctFrom(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDistinctFrom(this);
		}
	}


}

SqlBaseParser.DistinctFromContext = DistinctFromContext;

class InListContext extends PredicateContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	IN() {
	    return this.getToken(SqlBaseParser.IN, 0);
	};

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterInList(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitInList(this);
		}
	}


}

SqlBaseParser.InListContext = InListContext;

class NullPredicateContext extends PredicateContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	IS() {
	    return this.getToken(SqlBaseParser.IS, 0);
	};

	NULL() {
	    return this.getToken(SqlBaseParser.NULL, 0);
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterNullPredicate(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitNullPredicate(this);
		}
	}


}

SqlBaseParser.NullPredicateContext = NullPredicateContext;

class BetweenContext extends PredicateContext {

    constructor(parser, ctx) {
        super(parser);
        this.lower = null;;
        this.upper = null;;
        super.copyFrom(ctx);
    }

	BETWEEN() {
	    return this.getToken(SqlBaseParser.BETWEEN, 0);
	};

	AND() {
	    return this.getToken(SqlBaseParser.AND, 0);
	};

	valueExpression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ValueExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ValueExpressionContext,i);
	    }
	};

	NOT() {
	    return this.getToken(SqlBaseParser.NOT, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterBetween(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitBetween(this);
		}
	}


}

SqlBaseParser.BetweenContext = BetweenContext;

class QuantifiedComparisonContext extends PredicateContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	comparisonOperator() {
	    return this.getTypedRuleContext(ComparisonOperatorContext,0);
	};

	comparisonQuantifier() {
	    return this.getTypedRuleContext(ComparisonQuantifierContext,0);
	};

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterQuantifiedComparison(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitQuantifiedComparison(this);
		}
	}


}

SqlBaseParser.QuantifiedComparisonContext = QuantifiedComparisonContext;

class ValueExpressionContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_valueExpression;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class ValueExpressionDefaultContext extends ValueExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	primaryExpression() {
	    return this.getTypedRuleContext(PrimaryExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterValueExpressionDefault(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitValueExpressionDefault(this);
		}
	}


}

SqlBaseParser.ValueExpressionDefaultContext = ValueExpressionDefaultContext;

class ConcatenationContext extends ValueExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this.left = null;;
        this.right = null;;
        super.copyFrom(ctx);
    }

	CONCAT() {
	    return this.getToken(SqlBaseParser.CONCAT, 0);
	};

	valueExpression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ValueExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ValueExpressionContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterConcatenation(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitConcatenation(this);
		}
	}


}

SqlBaseParser.ConcatenationContext = ConcatenationContext;

class ArithmeticBinaryContext extends ValueExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this.left = null;;
        this.operator = null;;
        this.right = null;;
        super.copyFrom(ctx);
    }

	valueExpression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ValueExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ValueExpressionContext,i);
	    }
	};

	ASTERISK() {
	    return this.getToken(SqlBaseParser.ASTERISK, 0);
	};

	SLASH() {
	    return this.getToken(SqlBaseParser.SLASH, 0);
	};

	PERCENT() {
	    return this.getToken(SqlBaseParser.PERCENT, 0);
	};

	PLUS() {
	    return this.getToken(SqlBaseParser.PLUS, 0);
	};

	MINUS() {
	    return this.getToken(SqlBaseParser.MINUS, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterArithmeticBinary(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitArithmeticBinary(this);
		}
	}


}

SqlBaseParser.ArithmeticBinaryContext = ArithmeticBinaryContext;

class ArithmeticUnaryContext extends ValueExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this.operator = null;;
        super.copyFrom(ctx);
    }

	valueExpression() {
	    return this.getTypedRuleContext(ValueExpressionContext,0);
	};

	MINUS() {
	    return this.getToken(SqlBaseParser.MINUS, 0);
	};

	PLUS() {
	    return this.getToken(SqlBaseParser.PLUS, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterArithmeticUnary(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitArithmeticUnary(this);
		}
	}


}

SqlBaseParser.ArithmeticUnaryContext = ArithmeticUnaryContext;

class AtTimeZoneContext extends ValueExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	valueExpression() {
	    return this.getTypedRuleContext(ValueExpressionContext,0);
	};

	AT() {
	    return this.getToken(SqlBaseParser.AT, 0);
	};

	timeZoneSpecifier() {
	    return this.getTypedRuleContext(TimeZoneSpecifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterAtTimeZone(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitAtTimeZone(this);
		}
	}


}

SqlBaseParser.AtTimeZoneContext = AtTimeZoneContext;

class PrimaryExpressionContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_primaryExpression;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class DereferenceContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this.base = null;;
        this.fieldName = null;;
        super.copyFrom(ctx);
    }

	primaryExpression() {
	    return this.getTypedRuleContext(PrimaryExpressionContext,0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDereference(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDereference(this);
		}
	}


}

SqlBaseParser.DereferenceContext = DereferenceContext;

class TypeConstructorContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	string() {
	    return this.getTypedRuleContext(StringContext,0);
	};

	DOUBLE_PRECISION() {
	    return this.getToken(SqlBaseParser.DOUBLE_PRECISION, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterTypeConstructor(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitTypeConstructor(this);
		}
	}


}

SqlBaseParser.TypeConstructorContext = TypeConstructorContext;

class SpecialDateTimeFunctionContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this.name = null;;
        this.precision = null;;
        super.copyFrom(ctx);
    }

	CURRENT_DATE() {
	    return this.getToken(SqlBaseParser.CURRENT_DATE, 0);
	};

	CURRENT_TIME() {
	    return this.getToken(SqlBaseParser.CURRENT_TIME, 0);
	};

	INTEGER_VALUE() {
	    return this.getToken(SqlBaseParser.INTEGER_VALUE, 0);
	};

	CURRENT_TIMESTAMP() {
	    return this.getToken(SqlBaseParser.CURRENT_TIMESTAMP, 0);
	};

	LOCALTIME() {
	    return this.getToken(SqlBaseParser.LOCALTIME, 0);
	};

	LOCALTIMESTAMP() {
	    return this.getToken(SqlBaseParser.LOCALTIMESTAMP, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSpecialDateTimeFunction(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSpecialDateTimeFunction(this);
		}
	}


}

SqlBaseParser.SpecialDateTimeFunctionContext = SpecialDateTimeFunctionContext;

class SubstringContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SUBSTRING() {
	    return this.getToken(SqlBaseParser.SUBSTRING, 0);
	};

	valueExpression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ValueExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ValueExpressionContext,i);
	    }
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	FOR() {
	    return this.getToken(SqlBaseParser.FOR, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSubstring(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSubstring(this);
		}
	}


}

SqlBaseParser.SubstringContext = SubstringContext;

class CastContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CAST() {
	    return this.getToken(SqlBaseParser.CAST, 0);
	};

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	AS() {
	    return this.getToken(SqlBaseParser.AS, 0);
	};

	type() {
	    return this.getTypedRuleContext(TypeContext,0);
	};

	TRY_CAST() {
	    return this.getToken(SqlBaseParser.TRY_CAST, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCast(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCast(this);
		}
	}


}

SqlBaseParser.CastContext = CastContext;

class LambdaContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	identifier = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(IdentifierContext);
	    } else {
	        return this.getTypedRuleContext(IdentifierContext,i);
	    }
	};

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterLambda(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitLambda(this);
		}
	}


}

SqlBaseParser.LambdaContext = LambdaContext;

class ParenthesizedExpressionContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterParenthesizedExpression(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitParenthesizedExpression(this);
		}
	}


}

SqlBaseParser.ParenthesizedExpressionContext = ParenthesizedExpressionContext;

class ParameterContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }


	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterParameter(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitParameter(this);
		}
	}


}

SqlBaseParser.ParameterContext = ParameterContext;

class NormalizeContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	NORMALIZE() {
	    return this.getToken(SqlBaseParser.NORMALIZE, 0);
	};

	valueExpression() {
	    return this.getTypedRuleContext(ValueExpressionContext,0);
	};

	normalForm() {
	    return this.getTypedRuleContext(NormalFormContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterNormalize(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitNormalize(this);
		}
	}


}

SqlBaseParser.NormalizeContext = NormalizeContext;

class IntervalLiteralContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	interval() {
	    return this.getTypedRuleContext(IntervalContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterIntervalLiteral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitIntervalLiteral(this);
		}
	}


}

SqlBaseParser.IntervalLiteralContext = IntervalLiteralContext;

class NumericLiteralContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	number() {
	    return this.getTypedRuleContext(NumberContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterNumericLiteral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitNumericLiteral(this);
		}
	}


}

SqlBaseParser.NumericLiteralContext = NumericLiteralContext;

class BooleanLiteralContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	booleanValue() {
	    return this.getTypedRuleContext(BooleanValueContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterBooleanLiteral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitBooleanLiteral(this);
		}
	}


}

SqlBaseParser.BooleanLiteralContext = BooleanLiteralContext;

class SimpleCaseContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this.elseExpression = null;;
        super.copyFrom(ctx);
    }

	CASE() {
	    return this.getToken(SqlBaseParser.CASE, 0);
	};

	valueExpression() {
	    return this.getTypedRuleContext(ValueExpressionContext,0);
	};

	END() {
	    return this.getToken(SqlBaseParser.END, 0);
	};

	whenClause = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(WhenClauseContext);
	    } else {
	        return this.getTypedRuleContext(WhenClauseContext,i);
	    }
	};

	ELSE() {
	    return this.getToken(SqlBaseParser.ELSE, 0);
	};

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSimpleCase(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSimpleCase(this);
		}
	}


}

SqlBaseParser.SimpleCaseContext = SimpleCaseContext;

class ColumnReferenceContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterColumnReference(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitColumnReference(this);
		}
	}


}

SqlBaseParser.ColumnReferenceContext = ColumnReferenceContext;

class NullLiteralContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	NULL() {
	    return this.getToken(SqlBaseParser.NULL, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterNullLiteral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitNullLiteral(this);
		}
	}


}

SqlBaseParser.NullLiteralContext = NullLiteralContext;

class RowConstructorContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	ROW() {
	    return this.getToken(SqlBaseParser.ROW, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRowConstructor(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRowConstructor(this);
		}
	}


}

SqlBaseParser.RowConstructorContext = RowConstructorContext;

class SubscriptContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this.value = null;;
        this.index = null;;
        super.copyFrom(ctx);
    }

	primaryExpression() {
	    return this.getTypedRuleContext(PrimaryExpressionContext,0);
	};

	valueExpression() {
	    return this.getTypedRuleContext(ValueExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSubscript(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSubscript(this);
		}
	}


}

SqlBaseParser.SubscriptContext = SubscriptContext;

class SubqueryExpressionContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSubqueryExpression(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSubqueryExpression(this);
		}
	}


}

SqlBaseParser.SubqueryExpressionContext = SubqueryExpressionContext;

class BinaryLiteralContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	BINARY_LITERAL() {
	    return this.getToken(SqlBaseParser.BINARY_LITERAL, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterBinaryLiteral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitBinaryLiteral(this);
		}
	}


}

SqlBaseParser.BinaryLiteralContext = BinaryLiteralContext;

class CurrentUserContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this.name = null;;
        super.copyFrom(ctx);
    }

	CURRENT_USER() {
	    return this.getToken(SqlBaseParser.CURRENT_USER, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCurrentUser(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCurrentUser(this);
		}
	}


}

SqlBaseParser.CurrentUserContext = CurrentUserContext;

class ExtractContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	EXTRACT() {
	    return this.getToken(SqlBaseParser.EXTRACT, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	FROM() {
	    return this.getToken(SqlBaseParser.FROM, 0);
	};

	valueExpression() {
	    return this.getTypedRuleContext(ValueExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterExtract(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitExtract(this);
		}
	}


}

SqlBaseParser.ExtractContext = ExtractContext;

class StringLiteralContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	string() {
	    return this.getTypedRuleContext(StringContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterStringLiteral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitStringLiteral(this);
		}
	}


}

SqlBaseParser.StringLiteralContext = StringLiteralContext;

class ArrayConstructorContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	ARRAY() {
	    return this.getToken(SqlBaseParser.ARRAY, 0);
	};

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterArrayConstructor(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitArrayConstructor(this);
		}
	}


}

SqlBaseParser.ArrayConstructorContext = ArrayConstructorContext;

class FunctionCallContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	ASTERISK() {
	    return this.getToken(SqlBaseParser.ASTERISK, 0);
	};

	filter() {
	    return this.getTypedRuleContext(FilterContext,0);
	};

	over() {
	    return this.getTypedRuleContext(OverContext,0);
	};

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	ORDER() {
	    return this.getToken(SqlBaseParser.ORDER, 0);
	};

	BY() {
	    return this.getToken(SqlBaseParser.BY, 0);
	};

	sortItem = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(SortItemContext);
	    } else {
	        return this.getTypedRuleContext(SortItemContext,i);
	    }
	};

	setQuantifier() {
	    return this.getTypedRuleContext(SetQuantifierContext,0);
	};

	nullTreatment() {
	    return this.getTypedRuleContext(NullTreatmentContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterFunctionCall(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitFunctionCall(this);
		}
	}


}

SqlBaseParser.FunctionCallContext = FunctionCallContext;

class ExistsContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	EXISTS() {
	    return this.getToken(SqlBaseParser.EXISTS, 0);
	};

	query() {
	    return this.getTypedRuleContext(QueryContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterExists(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitExists(this);
		}
	}


}

SqlBaseParser.ExistsContext = ExistsContext;

class PositionContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	POSITION() {
	    return this.getToken(SqlBaseParser.POSITION, 0);
	};

	valueExpression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ValueExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ValueExpressionContext,i);
	    }
	};

	IN() {
	    return this.getToken(SqlBaseParser.IN, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterPosition(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitPosition(this);
		}
	}


}

SqlBaseParser.PositionContext = PositionContext;

class SearchedCaseContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this.elseExpression = null;;
        super.copyFrom(ctx);
    }

	CASE() {
	    return this.getToken(SqlBaseParser.CASE, 0);
	};

	END() {
	    return this.getToken(SqlBaseParser.END, 0);
	};

	whenClause = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(WhenClauseContext);
	    } else {
	        return this.getTypedRuleContext(WhenClauseContext,i);
	    }
	};

	ELSE() {
	    return this.getToken(SqlBaseParser.ELSE, 0);
	};

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSearchedCase(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSearchedCase(this);
		}
	}


}

SqlBaseParser.SearchedCaseContext = SearchedCaseContext;

class GroupingOperationContext extends PrimaryExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	GROUPING() {
	    return this.getToken(SqlBaseParser.GROUPING, 0);
	};

	qualifiedName = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(QualifiedNameContext);
	    } else {
	        return this.getTypedRuleContext(QualifiedNameContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterGroupingOperation(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitGroupingOperation(this);
		}
	}


}

SqlBaseParser.GroupingOperationContext = GroupingOperationContext;

class StringContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_string;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class UnicodeStringLiteralContext extends StringContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	UNICODE_STRING() {
	    return this.getToken(SqlBaseParser.UNICODE_STRING, 0);
	};

	UESCAPE() {
	    return this.getToken(SqlBaseParser.UESCAPE, 0);
	};

	STRING() {
	    return this.getToken(SqlBaseParser.STRING, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterUnicodeStringLiteral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitUnicodeStringLiteral(this);
		}
	}


}

SqlBaseParser.UnicodeStringLiteralContext = UnicodeStringLiteralContext;

class BasicStringLiteralContext extends StringContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	STRING() {
	    return this.getToken(SqlBaseParser.STRING, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterBasicStringLiteral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitBasicStringLiteral(this);
		}
	}


}

SqlBaseParser.BasicStringLiteralContext = BasicStringLiteralContext;

class NullTreatmentContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_nullTreatment;
    }

	IGNORE() {
	    return this.getToken(SqlBaseParser.IGNORE, 0);
	};

	NULLS() {
	    return this.getToken(SqlBaseParser.NULLS, 0);
	};

	RESPECT() {
	    return this.getToken(SqlBaseParser.RESPECT, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterNullTreatment(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitNullTreatment(this);
		}
	}


}



class TimeZoneSpecifierContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_timeZoneSpecifier;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class TimeZoneIntervalContext extends TimeZoneSpecifierContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	TIME() {
	    return this.getToken(SqlBaseParser.TIME, 0);
	};

	ZONE() {
	    return this.getToken(SqlBaseParser.ZONE, 0);
	};

	interval() {
	    return this.getTypedRuleContext(IntervalContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterTimeZoneInterval(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitTimeZoneInterval(this);
		}
	}


}

SqlBaseParser.TimeZoneIntervalContext = TimeZoneIntervalContext;

class TimeZoneStringContext extends TimeZoneSpecifierContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	TIME() {
	    return this.getToken(SqlBaseParser.TIME, 0);
	};

	ZONE() {
	    return this.getToken(SqlBaseParser.ZONE, 0);
	};

	string() {
	    return this.getTypedRuleContext(StringContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterTimeZoneString(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitTimeZoneString(this);
		}
	}


}

SqlBaseParser.TimeZoneStringContext = TimeZoneStringContext;

class ComparisonOperatorContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_comparisonOperator;
    }

	EQ() {
	    return this.getToken(SqlBaseParser.EQ, 0);
	};

	NEQ() {
	    return this.getToken(SqlBaseParser.NEQ, 0);
	};

	LT() {
	    return this.getToken(SqlBaseParser.LT, 0);
	};

	LTE() {
	    return this.getToken(SqlBaseParser.LTE, 0);
	};

	GT() {
	    return this.getToken(SqlBaseParser.GT, 0);
	};

	GTE() {
	    return this.getToken(SqlBaseParser.GTE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterComparisonOperator(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitComparisonOperator(this);
		}
	}


}



class ComparisonQuantifierContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_comparisonQuantifier;
    }

	ALL() {
	    return this.getToken(SqlBaseParser.ALL, 0);
	};

	SOME() {
	    return this.getToken(SqlBaseParser.SOME, 0);
	};

	ANY() {
	    return this.getToken(SqlBaseParser.ANY, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterComparisonQuantifier(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitComparisonQuantifier(this);
		}
	}


}



class BooleanValueContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_booleanValue;
    }

	TRUE() {
	    return this.getToken(SqlBaseParser.TRUE, 0);
	};

	FALSE() {
	    return this.getToken(SqlBaseParser.FALSE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterBooleanValue(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitBooleanValue(this);
		}
	}


}



class IntervalContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_interval;
        this.sign = null;
        this.from = null;
        this.to = null;
    }

	INTERVAL() {
	    return this.getToken(SqlBaseParser.INTERVAL, 0);
	};

	string() {
	    return this.getTypedRuleContext(StringContext,0);
	};

	intervalField = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(IntervalFieldContext);
	    } else {
	        return this.getTypedRuleContext(IntervalFieldContext,i);
	    }
	};

	TO() {
	    return this.getToken(SqlBaseParser.TO, 0);
	};

	PLUS() {
	    return this.getToken(SqlBaseParser.PLUS, 0);
	};

	MINUS() {
	    return this.getToken(SqlBaseParser.MINUS, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterInterval(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitInterval(this);
		}
	}


}



class IntervalFieldContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_intervalField;
    }

	YEAR() {
	    return this.getToken(SqlBaseParser.YEAR, 0);
	};

	MONTH() {
	    return this.getToken(SqlBaseParser.MONTH, 0);
	};

	DAY() {
	    return this.getToken(SqlBaseParser.DAY, 0);
	};

	HOUR() {
	    return this.getToken(SqlBaseParser.HOUR, 0);
	};

	MINUTE() {
	    return this.getToken(SqlBaseParser.MINUTE, 0);
	};

	SECOND() {
	    return this.getToken(SqlBaseParser.SECOND, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterIntervalField(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitIntervalField(this);
		}
	}


}



class NormalFormContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_normalForm;
    }

	NFD() {
	    return this.getToken(SqlBaseParser.NFD, 0);
	};

	NFC() {
	    return this.getToken(SqlBaseParser.NFC, 0);
	};

	NFKD() {
	    return this.getToken(SqlBaseParser.NFKD, 0);
	};

	NFKC() {
	    return this.getToken(SqlBaseParser.NFKC, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterNormalForm(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitNormalForm(this);
		}
	}


}



class TypesContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_types;
    }

	type = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(TypeContext);
	    } else {
	        return this.getTypedRuleContext(TypeContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterTypes(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitTypes(this);
		}
	}


}



class TypeContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_type;
        this.from = null;
        this.to = null;
    }

	ARRAY() {
	    return this.getToken(SqlBaseParser.ARRAY, 0);
	};

	LT() {
	    return this.getToken(SqlBaseParser.LT, 0);
	};

	type = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(TypeContext);
	    } else {
	        return this.getTypedRuleContext(TypeContext,i);
	    }
	};

	GT() {
	    return this.getToken(SqlBaseParser.GT, 0);
	};

	MAP() {
	    return this.getToken(SqlBaseParser.MAP, 0);
	};

	ROW() {
	    return this.getToken(SqlBaseParser.ROW, 0);
	};

	identifier = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(IdentifierContext);
	    } else {
	        return this.getTypedRuleContext(IdentifierContext,i);
	    }
	};

	baseType() {
	    return this.getTypedRuleContext(BaseTypeContext,0);
	};

	typeParameter = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(TypeParameterContext);
	    } else {
	        return this.getTypedRuleContext(TypeParameterContext,i);
	    }
	};

	INTERVAL() {
	    return this.getToken(SqlBaseParser.INTERVAL, 0);
	};

	TO() {
	    return this.getToken(SqlBaseParser.TO, 0);
	};

	intervalField = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(IntervalFieldContext);
	    } else {
	        return this.getTypedRuleContext(IntervalFieldContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterType(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitType(this);
		}
	}


}



class TypeParameterContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_typeParameter;
    }

	INTEGER_VALUE() {
	    return this.getToken(SqlBaseParser.INTEGER_VALUE, 0);
	};

	type() {
	    return this.getTypedRuleContext(TypeContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterTypeParameter(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitTypeParameter(this);
		}
	}


}



class BaseTypeContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_baseType;
    }

	TIME_WITH_TIME_ZONE() {
	    return this.getToken(SqlBaseParser.TIME_WITH_TIME_ZONE, 0);
	};

	TIMESTAMP_WITH_TIME_ZONE() {
	    return this.getToken(SqlBaseParser.TIMESTAMP_WITH_TIME_ZONE, 0);
	};

	DOUBLE_PRECISION() {
	    return this.getToken(SqlBaseParser.DOUBLE_PRECISION, 0);
	};

	qualifiedName() {
	    return this.getTypedRuleContext(QualifiedNameContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterBaseType(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitBaseType(this);
		}
	}


}



class WhenClauseContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_whenClause;
        this.condition = null;
        this.result = null;
    }

	WHEN() {
	    return this.getToken(SqlBaseParser.WHEN, 0);
	};

	THEN() {
	    return this.getToken(SqlBaseParser.THEN, 0);
	};

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterWhenClause(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitWhenClause(this);
		}
	}


}



class FilterContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_filter;
    }

	FILTER() {
	    return this.getToken(SqlBaseParser.FILTER, 0);
	};

	WHERE() {
	    return this.getToken(SqlBaseParser.WHERE, 0);
	};

	booleanExpression() {
	    return this.getTypedRuleContext(BooleanExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterFilter(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitFilter(this);
		}
	}


}



class OverContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_over;
        this._expression = null;
        this.partition = [];
    }

	OVER() {
	    return this.getToken(SqlBaseParser.OVER, 0);
	};

	PARTITION() {
	    return this.getToken(SqlBaseParser.PARTITION, 0);
	};

	BY = function(i) {
		if(i===undefined) {
			i = null;
		}
	    if(i===null) {
	        return this.getTokens(SqlBaseParser.BY);
	    } else {
	        return this.getToken(SqlBaseParser.BY, i);
	    }
	};


	ORDER() {
	    return this.getToken(SqlBaseParser.ORDER, 0);
	};

	sortItem = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(SortItemContext);
	    } else {
	        return this.getTypedRuleContext(SortItemContext,i);
	    }
	};

	windowFrame() {
	    return this.getTypedRuleContext(WindowFrameContext,0);
	};

	expression = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(ExpressionContext);
	    } else {
	        return this.getTypedRuleContext(ExpressionContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterOver(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitOver(this);
		}
	}


}



class WindowFrameContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_windowFrame;
        this.frameType = null;
        this.start = null;
        this.end = null;
    }

	RANGE() {
	    return this.getToken(SqlBaseParser.RANGE, 0);
	};

	frameBound = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(FrameBoundContext);
	    } else {
	        return this.getTypedRuleContext(FrameBoundContext,i);
	    }
	};

	ROWS() {
	    return this.getToken(SqlBaseParser.ROWS, 0);
	};

	GROUPS() {
	    return this.getToken(SqlBaseParser.GROUPS, 0);
	};

	BETWEEN() {
	    return this.getToken(SqlBaseParser.BETWEEN, 0);
	};

	AND() {
	    return this.getToken(SqlBaseParser.AND, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterWindowFrame(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitWindowFrame(this);
		}
	}


}



class FrameBoundContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_frameBound;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class BoundedFrameContext extends FrameBoundContext {

    constructor(parser, ctx) {
        super(parser);
        this.boundType = null;;
        super.copyFrom(ctx);
    }

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	PRECEDING() {
	    return this.getToken(SqlBaseParser.PRECEDING, 0);
	};

	FOLLOWING() {
	    return this.getToken(SqlBaseParser.FOLLOWING, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterBoundedFrame(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitBoundedFrame(this);
		}
	}


}

SqlBaseParser.BoundedFrameContext = BoundedFrameContext;

class UnboundedFrameContext extends FrameBoundContext {

    constructor(parser, ctx) {
        super(parser);
        this.boundType = null;;
        super.copyFrom(ctx);
    }

	UNBOUNDED() {
	    return this.getToken(SqlBaseParser.UNBOUNDED, 0);
	};

	PRECEDING() {
	    return this.getToken(SqlBaseParser.PRECEDING, 0);
	};

	FOLLOWING() {
	    return this.getToken(SqlBaseParser.FOLLOWING, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterUnboundedFrame(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitUnboundedFrame(this);
		}
	}


}

SqlBaseParser.UnboundedFrameContext = UnboundedFrameContext;

class CurrentRowBoundContext extends FrameBoundContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CURRENT() {
	    return this.getToken(SqlBaseParser.CURRENT, 0);
	};

	ROW() {
	    return this.getToken(SqlBaseParser.ROW, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCurrentRowBound(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCurrentRowBound(this);
		}
	}


}

SqlBaseParser.CurrentRowBoundContext = CurrentRowBoundContext;

class UpdateAssignmentContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_updateAssignment;
    }

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	EQ() {
	    return this.getToken(SqlBaseParser.EQ, 0);
	};

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterUpdateAssignment(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitUpdateAssignment(this);
		}
	}


}



class ExplainOptionContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_explainOption;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class ExplainFormatContext extends ExplainOptionContext {

    constructor(parser, ctx) {
        super(parser);
        this.value = null;;
        super.copyFrom(ctx);
    }

	FORMAT() {
	    return this.getToken(SqlBaseParser.FORMAT, 0);
	};

	TEXT() {
	    return this.getToken(SqlBaseParser.TEXT, 0);
	};

	GRAPHVIZ() {
	    return this.getToken(SqlBaseParser.GRAPHVIZ, 0);
	};

	JSON() {
	    return this.getToken(SqlBaseParser.JSON, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterExplainFormat(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitExplainFormat(this);
		}
	}


}

SqlBaseParser.ExplainFormatContext = ExplainFormatContext;

class ExplainTypeContext extends ExplainOptionContext {

    constructor(parser, ctx) {
        super(parser);
        this.value = null;;
        super.copyFrom(ctx);
    }

	TYPE() {
	    return this.getToken(SqlBaseParser.TYPE, 0);
	};

	LOGICAL() {
	    return this.getToken(SqlBaseParser.LOGICAL, 0);
	};

	DISTRIBUTED() {
	    return this.getToken(SqlBaseParser.DISTRIBUTED, 0);
	};

	VALIDATE() {
	    return this.getToken(SqlBaseParser.VALIDATE, 0);
	};

	IO() {
	    return this.getToken(SqlBaseParser.IO, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterExplainType(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitExplainType(this);
		}
	}


}

SqlBaseParser.ExplainTypeContext = ExplainTypeContext;

class TransactionModeContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_transactionMode;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class TransactionAccessModeContext extends TransactionModeContext {

    constructor(parser, ctx) {
        super(parser);
        this.accessMode = null;;
        super.copyFrom(ctx);
    }

	READ() {
	    return this.getToken(SqlBaseParser.READ, 0);
	};

	ONLY() {
	    return this.getToken(SqlBaseParser.ONLY, 0);
	};

	WRITE() {
	    return this.getToken(SqlBaseParser.WRITE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterTransactionAccessMode(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitTransactionAccessMode(this);
		}
	}


}

SqlBaseParser.TransactionAccessModeContext = TransactionAccessModeContext;

class IsolationLevelContext extends TransactionModeContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	ISOLATION() {
	    return this.getToken(SqlBaseParser.ISOLATION, 0);
	};

	LEVEL() {
	    return this.getToken(SqlBaseParser.LEVEL, 0);
	};

	levelOfIsolation() {
	    return this.getTypedRuleContext(LevelOfIsolationContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterIsolationLevel(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitIsolationLevel(this);
		}
	}


}

SqlBaseParser.IsolationLevelContext = IsolationLevelContext;

class LevelOfIsolationContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_levelOfIsolation;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class ReadUncommittedContext extends LevelOfIsolationContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	READ() {
	    return this.getToken(SqlBaseParser.READ, 0);
	};

	UNCOMMITTED() {
	    return this.getToken(SqlBaseParser.UNCOMMITTED, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterReadUncommitted(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitReadUncommitted(this);
		}
	}


}

SqlBaseParser.ReadUncommittedContext = ReadUncommittedContext;

class SerializableContext extends LevelOfIsolationContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	SERIALIZABLE() {
	    return this.getToken(SqlBaseParser.SERIALIZABLE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSerializable(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSerializable(this);
		}
	}


}

SqlBaseParser.SerializableContext = SerializableContext;

class ReadCommittedContext extends LevelOfIsolationContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	READ() {
	    return this.getToken(SqlBaseParser.READ, 0);
	};

	COMMITTED() {
	    return this.getToken(SqlBaseParser.COMMITTED, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterReadCommitted(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitReadCommitted(this);
		}
	}


}

SqlBaseParser.ReadCommittedContext = ReadCommittedContext;

class RepeatableReadContext extends LevelOfIsolationContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	REPEATABLE() {
	    return this.getToken(SqlBaseParser.REPEATABLE, 0);
	};

	READ() {
	    return this.getToken(SqlBaseParser.READ, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRepeatableRead(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRepeatableRead(this);
		}
	}


}

SqlBaseParser.RepeatableReadContext = RepeatableReadContext;

class CallArgumentContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_callArgument;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class PositionalArgumentContext extends CallArgumentContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterPositionalArgument(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitPositionalArgument(this);
		}
	}


}

SqlBaseParser.PositionalArgumentContext = PositionalArgumentContext;

class NamedArgumentContext extends CallArgumentContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	expression() {
	    return this.getTypedRuleContext(ExpressionContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterNamedArgument(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitNamedArgument(this);
		}
	}


}

SqlBaseParser.NamedArgumentContext = NamedArgumentContext;

class PrivilegeContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_privilege;
    }

	SELECT() {
	    return this.getToken(SqlBaseParser.SELECT, 0);
	};

	DELETE() {
	    return this.getToken(SqlBaseParser.DELETE, 0);
	};

	INSERT() {
	    return this.getToken(SqlBaseParser.INSERT, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterPrivilege(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitPrivilege(this);
		}
	}


}



class QualifiedNameContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_qualifiedName;
    }

	identifier = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(IdentifierContext);
	    } else {
	        return this.getTypedRuleContext(IdentifierContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterQualifiedName(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitQualifiedName(this);
		}
	}


}



class TableVersionExpressionContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_tableVersionExpression;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class TableVersionContext extends TableVersionExpressionContext {

    constructor(parser, ctx) {
        super(parser);
        this.tableVersionType = null;;
        super.copyFrom(ctx);
    }

	FOR() {
	    return this.getToken(SqlBaseParser.FOR, 0);
	};

	AS() {
	    return this.getToken(SqlBaseParser.AS, 0);
	};

	OF() {
	    return this.getToken(SqlBaseParser.OF, 0);
	};

	valueExpression() {
	    return this.getTypedRuleContext(ValueExpressionContext,0);
	};

	SYSTEM_TIME() {
	    return this.getToken(SqlBaseParser.SYSTEM_TIME, 0);
	};

	SYSTEM_VERSION() {
	    return this.getToken(SqlBaseParser.SYSTEM_VERSION, 0);
	};

	TIMESTAMP() {
	    return this.getToken(SqlBaseParser.TIMESTAMP, 0);
	};

	VERSION() {
	    return this.getToken(SqlBaseParser.VERSION, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterTableVersion(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitTableVersion(this);
		}
	}


}

SqlBaseParser.TableVersionContext = TableVersionContext;

class GrantorContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_grantor;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class CurrentUserGrantorContext extends GrantorContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CURRENT_USER() {
	    return this.getToken(SqlBaseParser.CURRENT_USER, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCurrentUserGrantor(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCurrentUserGrantor(this);
		}
	}


}

SqlBaseParser.CurrentUserGrantorContext = CurrentUserGrantorContext;

class SpecifiedPrincipalContext extends GrantorContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	principal() {
	    return this.getTypedRuleContext(PrincipalContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterSpecifiedPrincipal(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitSpecifiedPrincipal(this);
		}
	}


}

SqlBaseParser.SpecifiedPrincipalContext = SpecifiedPrincipalContext;

class CurrentRoleGrantorContext extends GrantorContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	CURRENT_ROLE() {
	    return this.getToken(SqlBaseParser.CURRENT_ROLE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterCurrentRoleGrantor(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitCurrentRoleGrantor(this);
		}
	}


}

SqlBaseParser.CurrentRoleGrantorContext = CurrentRoleGrantorContext;

class PrincipalContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_principal;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class UnspecifiedPrincipalContext extends PrincipalContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterUnspecifiedPrincipal(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitUnspecifiedPrincipal(this);
		}
	}


}

SqlBaseParser.UnspecifiedPrincipalContext = UnspecifiedPrincipalContext;

class UserPrincipalContext extends PrincipalContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	USER() {
	    return this.getToken(SqlBaseParser.USER, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterUserPrincipal(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitUserPrincipal(this);
		}
	}


}

SqlBaseParser.UserPrincipalContext = UserPrincipalContext;

class RolePrincipalContext extends PrincipalContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	ROLE() {
	    return this.getToken(SqlBaseParser.ROLE, 0);
	};

	identifier() {
	    return this.getTypedRuleContext(IdentifierContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRolePrincipal(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRolePrincipal(this);
		}
	}


}

SqlBaseParser.RolePrincipalContext = RolePrincipalContext;

class RolesContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_roles;
    }

	identifier = function(i) {
	    if(i===undefined) {
	        i = null;
	    }
	    if(i===null) {
	        return this.getTypedRuleContexts(IdentifierContext);
	    } else {
	        return this.getTypedRuleContext(IdentifierContext,i);
	    }
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterRoles(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitRoles(this);
		}
	}


}



class IdentifierContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_identifier;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class BackQuotedIdentifierContext extends IdentifierContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	BACKQUOTED_IDENTIFIER() {
	    return this.getToken(SqlBaseParser.BACKQUOTED_IDENTIFIER, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterBackQuotedIdentifier(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitBackQuotedIdentifier(this);
		}
	}


}

SqlBaseParser.BackQuotedIdentifierContext = BackQuotedIdentifierContext;

class QuotedIdentifierContext extends IdentifierContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	QUOTED_IDENTIFIER() {
	    return this.getToken(SqlBaseParser.QUOTED_IDENTIFIER, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterQuotedIdentifier(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitQuotedIdentifier(this);
		}
	}


}

SqlBaseParser.QuotedIdentifierContext = QuotedIdentifierContext;

class DigitIdentifierContext extends IdentifierContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DIGIT_IDENTIFIER() {
	    return this.getToken(SqlBaseParser.DIGIT_IDENTIFIER, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDigitIdentifier(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDigitIdentifier(this);
		}
	}


}

SqlBaseParser.DigitIdentifierContext = DigitIdentifierContext;

class UnquotedIdentifierContext extends IdentifierContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	IDENTIFIER() {
	    return this.getToken(SqlBaseParser.IDENTIFIER, 0);
	};

	nonReserved() {
	    return this.getTypedRuleContext(NonReservedContext,0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterUnquotedIdentifier(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitUnquotedIdentifier(this);
		}
	}


}

SqlBaseParser.UnquotedIdentifierContext = UnquotedIdentifierContext;

class NumberContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_number;
    }


	 
		copyFrom(ctx) {
			super.copyFrom(ctx);
		}

}


class DecimalLiteralContext extends NumberContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DECIMAL_VALUE() {
	    return this.getToken(SqlBaseParser.DECIMAL_VALUE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDecimalLiteral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDecimalLiteral(this);
		}
	}


}

SqlBaseParser.DecimalLiteralContext = DecimalLiteralContext;

class DoubleLiteralContext extends NumberContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	DOUBLE_VALUE() {
	    return this.getToken(SqlBaseParser.DOUBLE_VALUE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterDoubleLiteral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitDoubleLiteral(this);
		}
	}


}

SqlBaseParser.DoubleLiteralContext = DoubleLiteralContext;

class IntegerLiteralContext extends NumberContext {

    constructor(parser, ctx) {
        super(parser);
        super.copyFrom(ctx);
    }

	INTEGER_VALUE() {
	    return this.getToken(SqlBaseParser.INTEGER_VALUE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterIntegerLiteral(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitIntegerLiteral(this);
		}
	}


}

SqlBaseParser.IntegerLiteralContext = IntegerLiteralContext;

class NonReservedContext extends antlr4.ParserRuleContext {

    constructor(parser, parent, invokingState) {
        if(parent===undefined) {
            parent = null;
        }
        if(invokingState===undefined || invokingState===null) {
            invokingState = -1;
        }
        super(parent, invokingState);
        this.parser = parser;
        this.ruleIndex = SqlBaseParser.RULE_nonReserved;
    }

	ADD() {
	    return this.getToken(SqlBaseParser.ADD, 0);
	};

	ADMIN() {
	    return this.getToken(SqlBaseParser.ADMIN, 0);
	};

	ALL() {
	    return this.getToken(SqlBaseParser.ALL, 0);
	};

	ANALYZE() {
	    return this.getToken(SqlBaseParser.ANALYZE, 0);
	};

	ANY() {
	    return this.getToken(SqlBaseParser.ANY, 0);
	};

	ARRAY() {
	    return this.getToken(SqlBaseParser.ARRAY, 0);
	};

	ASC() {
	    return this.getToken(SqlBaseParser.ASC, 0);
	};

	AT() {
	    return this.getToken(SqlBaseParser.AT, 0);
	};

	BERNOULLI() {
	    return this.getToken(SqlBaseParser.BERNOULLI, 0);
	};

	CALL() {
	    return this.getToken(SqlBaseParser.CALL, 0);
	};

	CALLED() {
	    return this.getToken(SqlBaseParser.CALLED, 0);
	};

	CASCADE() {
	    return this.getToken(SqlBaseParser.CASCADE, 0);
	};

	CATALOGS() {
	    return this.getToken(SqlBaseParser.CATALOGS, 0);
	};

	COLUMN() {
	    return this.getToken(SqlBaseParser.COLUMN, 0);
	};

	COLUMNS() {
	    return this.getToken(SqlBaseParser.COLUMNS, 0);
	};

	COMMENT() {
	    return this.getToken(SqlBaseParser.COMMENT, 0);
	};

	COMMIT() {
	    return this.getToken(SqlBaseParser.COMMIT, 0);
	};

	COMMITTED() {
	    return this.getToken(SqlBaseParser.COMMITTED, 0);
	};

	CURRENT() {
	    return this.getToken(SqlBaseParser.CURRENT, 0);
	};

	CURRENT_ROLE() {
	    return this.getToken(SqlBaseParser.CURRENT_ROLE, 0);
	};

	DATA() {
	    return this.getToken(SqlBaseParser.DATA, 0);
	};

	DATE() {
	    return this.getToken(SqlBaseParser.DATE, 0);
	};

	DAY() {
	    return this.getToken(SqlBaseParser.DAY, 0);
	};

	DEFINER() {
	    return this.getToken(SqlBaseParser.DEFINER, 0);
	};

	DESC() {
	    return this.getToken(SqlBaseParser.DESC, 0);
	};

	DETERMINISTIC() {
	    return this.getToken(SqlBaseParser.DETERMINISTIC, 0);
	};

	DISTRIBUTED() {
	    return this.getToken(SqlBaseParser.DISTRIBUTED, 0);
	};

	EXCLUDING() {
	    return this.getToken(SqlBaseParser.EXCLUDING, 0);
	};

	EXPLAIN() {
	    return this.getToken(SqlBaseParser.EXPLAIN, 0);
	};

	EXTERNAL() {
	    return this.getToken(SqlBaseParser.EXTERNAL, 0);
	};

	FETCH() {
	    return this.getToken(SqlBaseParser.FETCH, 0);
	};

	FILTER() {
	    return this.getToken(SqlBaseParser.FILTER, 0);
	};

	FIRST() {
	    return this.getToken(SqlBaseParser.FIRST, 0);
	};

	FOLLOWING() {
	    return this.getToken(SqlBaseParser.FOLLOWING, 0);
	};

	FORMAT() {
	    return this.getToken(SqlBaseParser.FORMAT, 0);
	};

	FUNCTION() {
	    return this.getToken(SqlBaseParser.FUNCTION, 0);
	};

	FUNCTIONS() {
	    return this.getToken(SqlBaseParser.FUNCTIONS, 0);
	};

	GRANT() {
	    return this.getToken(SqlBaseParser.GRANT, 0);
	};

	GRANTED() {
	    return this.getToken(SqlBaseParser.GRANTED, 0);
	};

	GRANTS() {
	    return this.getToken(SqlBaseParser.GRANTS, 0);
	};

	GRAPHVIZ() {
	    return this.getToken(SqlBaseParser.GRAPHVIZ, 0);
	};

	GROUPS() {
	    return this.getToken(SqlBaseParser.GROUPS, 0);
	};

	HOUR() {
	    return this.getToken(SqlBaseParser.HOUR, 0);
	};

	IF() {
	    return this.getToken(SqlBaseParser.IF, 0);
	};

	IGNORE() {
	    return this.getToken(SqlBaseParser.IGNORE, 0);
	};

	INCLUDING() {
	    return this.getToken(SqlBaseParser.INCLUDING, 0);
	};

	INPUT() {
	    return this.getToken(SqlBaseParser.INPUT, 0);
	};

	INTERVAL() {
	    return this.getToken(SqlBaseParser.INTERVAL, 0);
	};

	INVOKER() {
	    return this.getToken(SqlBaseParser.INVOKER, 0);
	};

	IO() {
	    return this.getToken(SqlBaseParser.IO, 0);
	};

	ISOLATION() {
	    return this.getToken(SqlBaseParser.ISOLATION, 0);
	};

	JSON() {
	    return this.getToken(SqlBaseParser.JSON, 0);
	};

	LANGUAGE() {
	    return this.getToken(SqlBaseParser.LANGUAGE, 0);
	};

	LAST() {
	    return this.getToken(SqlBaseParser.LAST, 0);
	};

	LATERAL() {
	    return this.getToken(SqlBaseParser.LATERAL, 0);
	};

	LEVEL() {
	    return this.getToken(SqlBaseParser.LEVEL, 0);
	};

	LIMIT() {
	    return this.getToken(SqlBaseParser.LIMIT, 0);
	};

	LOGICAL() {
	    return this.getToken(SqlBaseParser.LOGICAL, 0);
	};

	MAP() {
	    return this.getToken(SqlBaseParser.MAP, 0);
	};

	MATERIALIZED() {
	    return this.getToken(SqlBaseParser.MATERIALIZED, 0);
	};

	MINUTE() {
	    return this.getToken(SqlBaseParser.MINUTE, 0);
	};

	MONTH() {
	    return this.getToken(SqlBaseParser.MONTH, 0);
	};

	NAME() {
	    return this.getToken(SqlBaseParser.NAME, 0);
	};

	NFC() {
	    return this.getToken(SqlBaseParser.NFC, 0);
	};

	NFD() {
	    return this.getToken(SqlBaseParser.NFD, 0);
	};

	NFKC() {
	    return this.getToken(SqlBaseParser.NFKC, 0);
	};

	NFKD() {
	    return this.getToken(SqlBaseParser.NFKD, 0);
	};

	NO() {
	    return this.getToken(SqlBaseParser.NO, 0);
	};

	NONE() {
	    return this.getToken(SqlBaseParser.NONE, 0);
	};

	NULLIF() {
	    return this.getToken(SqlBaseParser.NULLIF, 0);
	};

	NULLS() {
	    return this.getToken(SqlBaseParser.NULLS, 0);
	};

	OF() {
	    return this.getToken(SqlBaseParser.OF, 0);
	};

	OFFSET() {
	    return this.getToken(SqlBaseParser.OFFSET, 0);
	};

	ONLY() {
	    return this.getToken(SqlBaseParser.ONLY, 0);
	};

	OPTION() {
	    return this.getToken(SqlBaseParser.OPTION, 0);
	};

	ORDINALITY() {
	    return this.getToken(SqlBaseParser.ORDINALITY, 0);
	};

	OUTPUT() {
	    return this.getToken(SqlBaseParser.OUTPUT, 0);
	};

	OVER() {
	    return this.getToken(SqlBaseParser.OVER, 0);
	};

	PARTITION() {
	    return this.getToken(SqlBaseParser.PARTITION, 0);
	};

	PARTITIONS() {
	    return this.getToken(SqlBaseParser.PARTITIONS, 0);
	};

	POSITION() {
	    return this.getToken(SqlBaseParser.POSITION, 0);
	};

	PRECEDING() {
	    return this.getToken(SqlBaseParser.PRECEDING, 0);
	};

	PRIVILEGES() {
	    return this.getToken(SqlBaseParser.PRIVILEGES, 0);
	};

	PROPERTIES() {
	    return this.getToken(SqlBaseParser.PROPERTIES, 0);
	};

	RANGE() {
	    return this.getToken(SqlBaseParser.RANGE, 0);
	};

	READ() {
	    return this.getToken(SqlBaseParser.READ, 0);
	};

	REFRESH() {
	    return this.getToken(SqlBaseParser.REFRESH, 0);
	};

	RENAME() {
	    return this.getToken(SqlBaseParser.RENAME, 0);
	};

	REPEATABLE() {
	    return this.getToken(SqlBaseParser.REPEATABLE, 0);
	};

	REPLACE() {
	    return this.getToken(SqlBaseParser.REPLACE, 0);
	};

	RESET() {
	    return this.getToken(SqlBaseParser.RESET, 0);
	};

	RESPECT() {
	    return this.getToken(SqlBaseParser.RESPECT, 0);
	};

	RESTRICT() {
	    return this.getToken(SqlBaseParser.RESTRICT, 0);
	};

	RETURN() {
	    return this.getToken(SqlBaseParser.RETURN, 0);
	};

	RETURNS() {
	    return this.getToken(SqlBaseParser.RETURNS, 0);
	};

	REVOKE() {
	    return this.getToken(SqlBaseParser.REVOKE, 0);
	};

	ROLE() {
	    return this.getToken(SqlBaseParser.ROLE, 0);
	};

	ROLES() {
	    return this.getToken(SqlBaseParser.ROLES, 0);
	};

	ROLLBACK() {
	    return this.getToken(SqlBaseParser.ROLLBACK, 0);
	};

	ROW() {
	    return this.getToken(SqlBaseParser.ROW, 0);
	};

	ROWS() {
	    return this.getToken(SqlBaseParser.ROWS, 0);
	};

	SCHEMA() {
	    return this.getToken(SqlBaseParser.SCHEMA, 0);
	};

	SCHEMAS() {
	    return this.getToken(SqlBaseParser.SCHEMAS, 0);
	};

	SECOND() {
	    return this.getToken(SqlBaseParser.SECOND, 0);
	};

	SECURITY() {
	    return this.getToken(SqlBaseParser.SECURITY, 0);
	};

	SERIALIZABLE() {
	    return this.getToken(SqlBaseParser.SERIALIZABLE, 0);
	};

	SESSION() {
	    return this.getToken(SqlBaseParser.SESSION, 0);
	};

	SET() {
	    return this.getToken(SqlBaseParser.SET, 0);
	};

	SETS() {
	    return this.getToken(SqlBaseParser.SETS, 0);
	};

	SQL() {
	    return this.getToken(SqlBaseParser.SQL, 0);
	};

	SHOW() {
	    return this.getToken(SqlBaseParser.SHOW, 0);
	};

	SOME() {
	    return this.getToken(SqlBaseParser.SOME, 0);
	};

	START() {
	    return this.getToken(SqlBaseParser.START, 0);
	};

	STATS() {
	    return this.getToken(SqlBaseParser.STATS, 0);
	};

	SUBSTRING() {
	    return this.getToken(SqlBaseParser.SUBSTRING, 0);
	};

	SYSTEM() {
	    return this.getToken(SqlBaseParser.SYSTEM, 0);
	};

	SYSTEM_TIME() {
	    return this.getToken(SqlBaseParser.SYSTEM_TIME, 0);
	};

	SYSTEM_VERSION() {
	    return this.getToken(SqlBaseParser.SYSTEM_VERSION, 0);
	};

	TABLES() {
	    return this.getToken(SqlBaseParser.TABLES, 0);
	};

	TABLESAMPLE() {
	    return this.getToken(SqlBaseParser.TABLESAMPLE, 0);
	};

	TEMPORARY() {
	    return this.getToken(SqlBaseParser.TEMPORARY, 0);
	};

	TEXT() {
	    return this.getToken(SqlBaseParser.TEXT, 0);
	};

	TIME() {
	    return this.getToken(SqlBaseParser.TIME, 0);
	};

	TIMESTAMP() {
	    return this.getToken(SqlBaseParser.TIMESTAMP, 0);
	};

	TO() {
	    return this.getToken(SqlBaseParser.TO, 0);
	};

	TRANSACTION() {
	    return this.getToken(SqlBaseParser.TRANSACTION, 0);
	};

	TRUNCATE() {
	    return this.getToken(SqlBaseParser.TRUNCATE, 0);
	};

	TRY_CAST() {
	    return this.getToken(SqlBaseParser.TRY_CAST, 0);
	};

	TYPE() {
	    return this.getToken(SqlBaseParser.TYPE, 0);
	};

	UNBOUNDED() {
	    return this.getToken(SqlBaseParser.UNBOUNDED, 0);
	};

	UNCOMMITTED() {
	    return this.getToken(SqlBaseParser.UNCOMMITTED, 0);
	};

	UPDATE() {
	    return this.getToken(SqlBaseParser.UPDATE, 0);
	};

	USE() {
	    return this.getToken(SqlBaseParser.USE, 0);
	};

	USER() {
	    return this.getToken(SqlBaseParser.USER, 0);
	};

	VALIDATE() {
	    return this.getToken(SqlBaseParser.VALIDATE, 0);
	};

	VERBOSE() {
	    return this.getToken(SqlBaseParser.VERBOSE, 0);
	};

	VERSION() {
	    return this.getToken(SqlBaseParser.VERSION, 0);
	};

	VIEW() {
	    return this.getToken(SqlBaseParser.VIEW, 0);
	};

	WORK() {
	    return this.getToken(SqlBaseParser.WORK, 0);
	};

	WRITE() {
	    return this.getToken(SqlBaseParser.WRITE, 0);
	};

	YEAR() {
	    return this.getToken(SqlBaseParser.YEAR, 0);
	};

	ZONE() {
	    return this.getToken(SqlBaseParser.ZONE, 0);
	};

	enterRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.enterNonReserved(this);
		}
	}

	exitRule(listener) {
	    if(listener instanceof SqlBaseListener ) {
	        listener.exitNonReserved(this);
		}
	}


}




SqlBaseParser.SingleStatementContext = SingleStatementContext; 
SqlBaseParser.StandaloneExpressionContext = StandaloneExpressionContext; 
SqlBaseParser.StandaloneRoutineBodyContext = StandaloneRoutineBodyContext; 
SqlBaseParser.StatementContext = StatementContext; 
SqlBaseParser.QueryContext = QueryContext; 
SqlBaseParser.WithContext = WithContext; 
SqlBaseParser.TableElementContext = TableElementContext; 
SqlBaseParser.ColumnDefinitionContext = ColumnDefinitionContext; 
SqlBaseParser.LikeClauseContext = LikeClauseContext; 
SqlBaseParser.PropertiesContext = PropertiesContext; 
SqlBaseParser.PropertyContext = PropertyContext; 
SqlBaseParser.SqlParameterDeclarationContext = SqlParameterDeclarationContext; 
SqlBaseParser.RoutineCharacteristicsContext = RoutineCharacteristicsContext; 
SqlBaseParser.RoutineCharacteristicContext = RoutineCharacteristicContext; 
SqlBaseParser.AlterRoutineCharacteristicsContext = AlterRoutineCharacteristicsContext; 
SqlBaseParser.AlterRoutineCharacteristicContext = AlterRoutineCharacteristicContext; 
SqlBaseParser.RoutineBodyContext = RoutineBodyContext; 
SqlBaseParser.ReturnStatementContext = ReturnStatementContext; 
SqlBaseParser.ExternalBodyReferenceContext = ExternalBodyReferenceContext; 
SqlBaseParser.LanguageContext = LanguageContext; 
SqlBaseParser.DeterminismContext = DeterminismContext; 
SqlBaseParser.NullCallClauseContext = NullCallClauseContext; 
SqlBaseParser.ExternalRoutineNameContext = ExternalRoutineNameContext; 
SqlBaseParser.QueryNoWithContext = QueryNoWithContext; 
SqlBaseParser.QueryTermContext = QueryTermContext; 
SqlBaseParser.QueryPrimaryContext = QueryPrimaryContext; 
SqlBaseParser.SortItemContext = SortItemContext; 
SqlBaseParser.QuerySpecificationContext = QuerySpecificationContext; 
SqlBaseParser.GroupByContext = GroupByContext; 
SqlBaseParser.GroupingElementContext = GroupingElementContext; 
SqlBaseParser.GroupingSetContext = GroupingSetContext; 
SqlBaseParser.NamedQueryContext = NamedQueryContext; 
SqlBaseParser.SetQuantifierContext = SetQuantifierContext; 
SqlBaseParser.SelectItemContext = SelectItemContext; 
SqlBaseParser.RelationContext = RelationContext; 
SqlBaseParser.JoinTypeContext = JoinTypeContext; 
SqlBaseParser.JoinCriteriaContext = JoinCriteriaContext; 
SqlBaseParser.SampledRelationContext = SampledRelationContext; 
SqlBaseParser.SampleTypeContext = SampleTypeContext; 
SqlBaseParser.AliasedRelationContext = AliasedRelationContext; 
SqlBaseParser.ColumnAliasesContext = ColumnAliasesContext; 
SqlBaseParser.RelationPrimaryContext = RelationPrimaryContext; 
SqlBaseParser.ExpressionContext = ExpressionContext; 
SqlBaseParser.BooleanExpressionContext = BooleanExpressionContext; 
SqlBaseParser.PredicateContext = PredicateContext; 
SqlBaseParser.ValueExpressionContext = ValueExpressionContext; 
SqlBaseParser.PrimaryExpressionContext = PrimaryExpressionContext; 
SqlBaseParser.StringContext = StringContext; 
SqlBaseParser.NullTreatmentContext = NullTreatmentContext; 
SqlBaseParser.TimeZoneSpecifierContext = TimeZoneSpecifierContext; 
SqlBaseParser.ComparisonOperatorContext = ComparisonOperatorContext; 
SqlBaseParser.ComparisonQuantifierContext = ComparisonQuantifierContext; 
SqlBaseParser.BooleanValueContext = BooleanValueContext; 
SqlBaseParser.IntervalContext = IntervalContext; 
SqlBaseParser.IntervalFieldContext = IntervalFieldContext; 
SqlBaseParser.NormalFormContext = NormalFormContext; 
SqlBaseParser.TypesContext = TypesContext; 
SqlBaseParser.TypeContext = TypeContext; 
SqlBaseParser.TypeParameterContext = TypeParameterContext; 
SqlBaseParser.BaseTypeContext = BaseTypeContext; 
SqlBaseParser.WhenClauseContext = WhenClauseContext; 
SqlBaseParser.FilterContext = FilterContext; 
SqlBaseParser.OverContext = OverContext; 
SqlBaseParser.WindowFrameContext = WindowFrameContext; 
SqlBaseParser.FrameBoundContext = FrameBoundContext; 
SqlBaseParser.UpdateAssignmentContext = UpdateAssignmentContext; 
SqlBaseParser.ExplainOptionContext = ExplainOptionContext; 
SqlBaseParser.TransactionModeContext = TransactionModeContext; 
SqlBaseParser.LevelOfIsolationContext = LevelOfIsolationContext; 
SqlBaseParser.CallArgumentContext = CallArgumentContext; 
SqlBaseParser.PrivilegeContext = PrivilegeContext; 
SqlBaseParser.QualifiedNameContext = QualifiedNameContext; 
SqlBaseParser.TableVersionExpressionContext = TableVersionExpressionContext; 
SqlBaseParser.GrantorContext = GrantorContext; 
SqlBaseParser.PrincipalContext = PrincipalContext; 
SqlBaseParser.RolesContext = RolesContext; 
SqlBaseParser.IdentifierContext = IdentifierContext; 
SqlBaseParser.NumberContext = NumberContext; 
SqlBaseParser.NonReservedContext = NonReservedContext; 
